1 Sysselsetting i ulike næringer, etter arbeidssted
Haugalandet
Første regionen vi velger å se på er Haugalandet. Her ønsker vi å se på utviklingen fra 2008 til 2020, av antall ansatte i sin helhet i regionen, samt de 6 mest relevante næringene.

I 2020 er det i underkant av 50 000 ansatte i alle næringer på Haugalandet. Av Fig. 1 ser vi at Haugalandet fikk en nedgang i antall ansatte i 2015 og 2016. I 2017 og 2018 ble det vekst, frem til det snudde i 2019 igjen.

I Fig. 2 ser vi at flere av kommunene på Haugalandet har hatt liten arbeidsplassvekst, med unntak av Tysvær, Vindafjord og Karmøy i den siste tiårsperioden. Vi ser dette mer tydelig på fig. 3 og 4.


Figur 3 og 4 viser utviklingen av det totale antall ansatte i alle næringer på kommunalt nivå, innenfor Haugaland-regionen.
I disse figurene, så ser vi tydelig at Haugesund har hatt reduksjon i antall ansatte totalt sett, mens Karmøy, Vindafjord og Tysvær har hatt en markant vekst de siste ti årene. Siden Haugesund har flest arbeidsplasser betyr utviklingen i Haugesund mye for de samlede tallene.
Warning: Removed 1 row(s) containing missing values (geom_path).

Warning: Removed 1 row(s) containing missing values (geom_path).

Figur 5 og 6 viser utviklingen av de 6 mest relevante næringene i Haugalandsregionen på kommune nivå.
Vi ser i de tre største kommunene, Haugesund, Karmøy og Vindafjord utgjør næringene Helse- og Sosialtjenester og Industri de største. Helse- og Sosialtjenester har vokst jevnt og trutt de siste tiårene, mens antall ansatte i industrinæringen har variert fra kommune til kommune. I Haugalandet utgjør primærnæringer (jordbruk, Skogbrug og Fiske) en større andel, enn hos Karmøy og Haugesund hvor primærnæringene kun utgjøre en liten andel.
Sysselsettingsutviklingen for ulike næringer i ulike kommuner og for regionen samlet.
Det er relativt store kommunevise forskjeller i næringsstrukturen. Rogaland har en forholdsvis ensidig næringsstruktur, olje og gass er dominerende. Fylket er suverent dominerende for fossil energi. De har for øvrig de siste årene satset på et en mer differensiert næringsstruktur og næringsliv ved å satse på helse, IKT og fornybar energi.
I våre modeller, er satsingen på helse den mest tydelige. Av rent tekniske grunner er det vanskelig å se utviklingen i enkelte næringer som utgjør små andeler, på grunn av skalaen som er benyttet. Til tross for dette, kan man se at næringsstrukturen i regionen samlet generelt sett har endret seg lite.
Rogaland har gode jordbruksmuligheter, men i Fig. 2: Haugalandet ser vi en nedgang i sysselsettingen de siste tiårene, mens det er en marginal økning i Sunnhordaland, jf. Fig 9. I Fig. 12: ser vi at Tysnes har hatt en markant økning i primærnæringen, relativt sett.
Universitets- og høgskolesektoren er liten i Rogaland, og den består for det første av Universitetet i Stavanger (UiS) og Høgskulen på Vestlandet (HVL) med campus Haugesund.
Haugaland Vekst, som er eigd/drevet av Haugalandsregionen er i spissen på å legge til rette for å etablere ny industri samt andre arbeidsplasser i regionen.
I helsesektoren er Stavanger universitetssykehus (SuS) sentralt.
Sunnhordland
Videre ønsker vi å se på den samme utviklingen, men denne gangen i Sunnhordlandsregionen.

Her viser figur 7 utviklingen til den totale summen av ansatte i Sunnhordlandsregionen fra 2008 til 2020. Sunnhordaland har i 2020 i underkant av 25 500 ansatte. Vi ser ut ifrå figuren at Sunnhordlandsregionen hadde ein markant vekst ifrå 2008 til 2014 med periodar med svak nedgang. Fra 2014 har det vært en reduksjon i totalt antall ansatte.

Figur 8 viser utviklingen av totalt ansatte i Sunnhordlandsregionen på kommunenivå i hele regionen fra 2008 til 2020. Denne figuren gir oss en oversikt, men er ikke heilt brukervennelig. Vi lager dermed en mer oversiktlig figur, jf. figur 9 & 10.


Vi ser her ut ifra figur 9 og 10 utviklingen for hver enkelt kommune i Sunnhordland totalt sett, og her ser vi mye tydligere utviklingen fra 2008 til 2020. En kan se her at Kvinnherad, Etne og Fitjar har hatt en reduksjon i totalt ansatte, mens Tysnes og Sveio har hatt ein kraftig vekst. En interessant bemerking er Stord i 2014 og Kvinnherad fra 2008 til 2017.
For å få et bedre oversikt over utviklingen i kommunen ønsker vi å se på de 6 mest relevante næringene i hver kommune.

Warning: Removed 1 row(s) containing missing values (geom_path).

Figur 11 og 12 viser de 6 mest relevante næringene i hver enkelt kommune i Sunnhordlandsregionen fra 2008 til 2020.
En ser ut ifra figur 11 at i de tre største kommunene, Bømlo, Kvinnherad og Stord så har de alle hatt en reduksjon i industrien, samtidig som de har hatt en vekst i helse- og sosialtjenester. Tysnes har vært stabil når det kommer til industri, men har sett ein markant vekst i primærnæringen (Jordbruk, Skogbruk og Fiske).
Sysselsettingsutviklingen for ulike næringer i ulike kommuner og for regionen samlet.
Det første bemerkelsesverdige i Sunnhordlandsregionen er den markante reduksjonen i industri i Stord kommune i 2014, samt Kvinnherad fra 2008. Dette stemmer overens med to hendelser. Den første er oljeknekken i 2014 som medførte at bl.a. Aker Stord AS som er avhengig av Olje-industrien måtte permitere.
Stord er en kommune som har mye offshore industri. I 2008/2009 så stengte Sør-Norge Aluminium “B-Hallen” som medførte 50% reduksjon i produksjon, og dermed ansatte. Interessant å bemerke at i Kvinnherad så er antall industriarbeidere redusert samtidig som antall ansatte i Helse- og Sosialetjenester økt. Bømlo har også sett en stabil reduksjon i ansatte innen industri, samt vekst i Helse- og Sosialetjenester frem til 2018.
Ser en på hele Sunnhordlandsregionen i sin helhet, så ser vi en svært tydelig vekst innen Helse- og Sosialetjenester, og reduksjon innen industri i hele regionen. Kvinnherad, Tysnes og Fitjar har opplevd ein markant vekst innen primærnæring. Kan det vere ein grunn til dette som burde diskuterast??
Pendling
De ulike kommunene og regionene har ulike behov, for at regionene skal utvikle seg er pendling et viktig begrep for å tiltrekke seg arbeidskraft. Veldig mange kommuner har for lite arbeidsplasser i forhold til antall arbeidende innbyggere, som vil si at de fleste er avhengige av pendlere. Pendling kan være til andre kommuner i samme region eller til andre regioner. Alle kommuner har kanskje ikke arbeidsplasser innen alle fagfelt, arbeidstakere er derfor avhengig av å pendler til andre kommuner for å finne relevant arbeid. Det samme gjelder dersom arbeidstaker har tilhørighet til en kommune, men det ikke finnes relevant arbeid da er han også nødt til å søke jobb i andre kommuner. Her kommer begrepene innpendling og utpendling inn, som betyr at noen kommuner eller regioner har flere arbeidsplasser tilgjengelige enn de har innbyggere som kan jobbe innad i kommunen eller at de ikke har nok arbeidsplasser og innbyggerene er nødt til å søke jobb andre plasser. Vi skal se på innpendling og utpendling som vil kunne fortelle oss i hvilken grad et sted er integrert i et større arbeidsmarked https://regionalanalyse.no/rapport/3004/1/4.
Nedenfor vil vi først ta for oss regionen Haugalandet og Sunnhordland med Ullensvang, og se på disse regionene hver for seg. Så kommer en tabell som tar for seg disse regionene samlet. Vi ønsker først å skille disse to regionene for å se i hvilken kommune andelen av innpendling og utpendling er størst og minst. For så å se på pendlingen mellom regionene.
I radene sees pendling inn til kommunene. Nederste rad viser totalen av antall pendlere inn til den enkelte kommune. Her kan vi se en andel stillinger som er besatt av arbeidstakere fra andre kommuner i Haugalandsregionen.
I kolonnene ser man de som pendlere ut av hver enkelt kommune. Det vil si arbeidstakere som bor i en kommune, og som har arbeidsted i en annen kommune innenfor Hauglandsregionen.
De som er markert med gult er arbeidstakere som bor og jobber i samme kommune.
Hauglandsregionen:

Haugalandsregionen har 44119 arbeidsplasser, hvorav 13170 er pendlere.
Haugesund, Karmøy og Tysvær er de kommunene i regionen med høyest andel pendlere både når det gjelder inn- og utpendling. La oss se nærmere på Haugesund som har en stor del av arbeidstakerne i regionen. Det gjelder både når vi ser på innpendling, utpendling og de som bor og jobber i samme kommune. Ut ifra tabellen kan vi se at Haugesund har 11714 arbeidstakere som bor og jobber i kommunen. Fra Haugesund er det eksempelvis 1029 arbeidstakere som pendler til Tysvær og 2586 arbeidstakere som pendler til Karmøy. Til Sauda og Utsira er det en betydelig lavere andel som pendler. Grunnen til at det nok at det er mindre kommuner med færre arbeidsplasser. Mange av de som bor i distriktene som eksempelvis Sauda og Utsira jobber og bor i samme kommune. Vi kan se at i Sauda jobber og bor det 1789 arbeidstaker, mens de har 31 stykk som pendler inn til kommunen og 66 stykk som pendler ut av kommunen. Det kan være flere som pendler inn til og ut av kommunen fra andre regioner, men her ser vi tallene på de som pendler i Haugalandsregionen.
Vi vet at Haugesund er regionsentrum med sykehus og høgskole. Samtidig har Haugesund flere olje og sjøfartsnæringer. Det er sentralisert som betyr at det er grunnlag for et større jobbmarked. Det er årsaken til at Haugesund har mer innpendling enn de andre kommunene i regionen. Karmøy og Tysvær som ligger nærmest Haugesund har størst andel utpendling, også til Haugesund.
Sunnhordland

I Sunnhordlandsregionen er det 28275 arbeidstakere om har sin arbeidsplass, av disse er det 2575 som har sitt arbeid i en annen kommune enn den de bor i.
Som vi kan se er Stord den kommunen med flest arbeidstakere. Dette kan vi se i sammenheng med at Stord er som et sentrum for regionen. En del av de interkommunale samarbeidene har sine kontorer lokalisert på Stord. Stord har 7314 som både bor og arbeider innad i kommunen. Å av Stordabuen som pendler ut av kommunen er det flest som pendler til Bømlo og Fitjar. Dette gjelder også motsatt da Stord får flest innpendlere fra de samme kommunene. Stord og Ullensvang er de eneste kommunene som har flere som pendler inn enn ut.
I Etne er det ganske likt med inn og utpendlere da de har 66 som pendler ut og 61 som pendler inn til kommunen. Etne er også den kommunen som har minst arbeidere som driver med pendling.
Vi har valgt å ta med Ullensvang i Sunnhordlandsoversikten. Etne og Kvinnherad er begge nabokommuner til Ullensvang. Ullensvang har lite både inn og utpendling.
En samlet oversikt over Haugalandsregionen og Sunnhordlandsregionen

Vi har sett på inndelingene i de forskjellige regionene. Videre ønsker vi å se på regionene i en samlet tabell.
Vi har tidligere skrevet om at Haugalandsregionen har 13170 pendlere, mens Sunnhordlandsregionen og Ullensvang har 2575 pendlere. Om vi ser begge regionene samlet, øker antall pendlere med totalt 3311 arbeidstakere. Det vil si at det er 3311 stykker som pendler på tvers av regionene.
Utsira har ikke inn- eller utpendlere til Sunnhordland. Bortsett fra en person som pendler til Sveio har heller ikke Bokn utpendling til Sunnhordland.
Haugesund er den kommunen som har flest pendlere inn til kommunen. De ligger langt foran de andre kommunene når det er snakk om pendling inn til kommunene. Karmøy er den kommunen som har flest innbyggere som pendler ut av kommunen.
Videre kan man se på de systematiske forskjellene sett i forhold til sentralitet og tilgjengelighet i det lokale arbeidsmarkedet.
Haugesund, Karmøy og Stord er sentrale kommuner hvor det finnes en stor andel arbeidsplasser og tilgjengeligheten i arbeidsmarkedet er større enn i eksempelvis Sauda, Utsira, Tysnes eller Ullensvang. De sentraliserte kommunene har en fordel i forhold til å skape klynger, det med tanke på at når flere mennesker bosetter seg i samme område kan en dra nytte av kompetansen de innehar. Sauda, Utsira, Tysnes og Ullensvang er eksempler på kommuner i utkanten av regionene. De befinner seg såpass langt utenfor at de ikke vil dra nytte av sentralitet.
I figur 3 og 4 vises det at de siste 10 årene har Haugesund hatt en reduksjon i antall ansatte, men Karmøy, Vindafjord og Tysvær har hatt en markant økning i antall arbeidstakere. Det vi vet er at det har utviklet seg større næringsklynger utenfor Haugesund de siste årene som kan ha en sammenheng med økning i antall ansatte. Samtidig har oljebransjen i samme periode slitt med nedgangstider som påvirker både Haugesund og Stord. Disse kommunene har en del oljebaserte næringer og i de periodene oljemarkedet svinger vil arbeidsmarkedet vise markant nedgang i antall arbeidsplasser. Det vil også vise en betydelig økning i antall arbeidsplasser om det er oppgangstider. Oppgangstider i oljenæringen gir en økning av pendlere inn til kommuner som har virksomheter innenfor oljenæringen.
LS0tCnRpdGxlOiAiQXJiZWlkc2tyYXYgdsOlcmVuIDIwMjIiCmF1dGhvcjoKLSBLZXZpbiBIYQotIE9sYSBBbmRyZSBPbG9mc3NvbgotIEFubiBFbGlzYWJldGggSmFjb2JzZW4KLSBIZWlkaSBNYXJpZSBSb2xmc25lcwotIERhbmllbCBLYXJzdGFkCi0gSGVucmlldHRlIEhhbnNlbgotIFN1c2FubiBCaXJrZWxhbmQgU2l2ZXJ0c2VuCi0gVmlsZGUgSGF1Z2xhbmQKc3VidGl0bGU6IE1TQjEwNiwgQW52ZW5kdCBieS0gb2cgcmVnaW9uYWzDuGtvbm9taQpvdXRwdXQ6CiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIGh0bWxfZG9jdW1lbnQ6CiAgICBkZl9wcmludDogcGFnZWQKbGFuZzogbm8tTkIKZWRpdG9yX29wdGlvbnM6IAogIG1hcmtkb3duOiAKICAgIHdyYXA6IHNlbnRlbmNlCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyh7CiAgbGlicmFyeShyZWFkcikKICBsaWJyYXJ5KGdncGxvdDIpCiAgbGlicmFyeShrbml0cikKICBsaWJyYXJ5KHZpcmlkaXMpCiAgbGlicmFyeSh0aWR5dmVyc2UpCiAgbGlicmFyeShrYWJsZUV4dHJhKQogIH0pCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvPUZBTFNFLCBpbmNsdWRlID0gVFJVRSkKYGBgCgojIFJvbWxpZ2UgZm9yc2tqZWxsZXIgaSBuw6ZyaW5nc3N0cnVrdHVyLCB2aXJrbmluZ2VyIGF2IGVrc29nZW5lIHNqb2trIGkgYmFzaXNzeXNzZWxzZXR0aW5nZW4sIG9nIGxva2FsZSBmb3Jza2plbGxlciBJIHN5c3NlbHNldHRpbmdzdmVrc3QuCgpJIGRlbm5lIG9wcGdhdmVuIHZpbCB2aSBzZSBww6UgbsOmcmluZ3NzdHJ1a3R1cmVyIHDDpSBIYXVnYWxhbmRldCwgU3VubmhvcmRsYW5kIG9nIFVsbGVuc3ZhbmcuCgpQcm9ibGVtc3RpbGxpbmdlciBvZyBiZXJlZ25pbmdlciB2aSB2aWwgc2UgbsOmcm1lcmUgcMOlCgotICAgQmVza3JpdmUgc2l0dWFzam9uZW4gc2xpayBkZW4gZXIgZm9yIDIwMjAsIG9nIGZvciB1dHZpa2xpbmdlbiBvdmVyIHRpZC4KLSAgIFN5c3NlbHNldHRpbmdzdXR2aWtsaW5nZW4gZm9yIHVsaWtlIG7DpnJpbmdlciBpIHVsaWtlIGtvbW11bmVyIG9nIGZvciByZWdpb25lbiBzYW1sZXQuCi0gICBBbmRlbGVuIGF2IHN5c3NlbHNldHRpbmdlbiBpbm5lbmZvciBlbmtlbHRuw6ZyaW5nZXIsIG9nIHNhbW1lbmxpZ25lIHNpdHVhc2pvbmVuIG9nIHV0dmlrbGluZ2VuIGZvciBsb2thbGUga29tbXVuZXIgb2cgbG9rYWwgcmVnaW9uIG1lZCBkZXQgc29tIGdqZWxkZXIgZm9yIG5hc2pvbmVuIHNhbWxldC4KLSAgIEJlcmVnbmUgbG9rYWxpc2VyaW5nc2t2b3RpZW50ZXIgZm9yIHVsaWtlIG7DpnJpbmdlciBpIHVsaWtlIGtvbW11bmVyLCBvZyBmb3IgcmVnaW9uZW4oZSkgc2FtbGV0LgotICAgQmVyZWduZSB1bGlrZSBhZ2dyZWdlcmluZ3NuaXbDpWVyIGF2IG7DpnJpbmdlciBvZyBnZW9ncmFmaSwgaWRlbnRpZmlzZXIgbXVsaWdlIGtseW5nZXIgYmFzZXJ0IHDDpSB2ZXJkaWVuZSBmb3IgbG9rYWxpc2VyaW5nc2t2b3RpZW50ZW5lLgotICAgR2rDuHJlIGVuIHZ1cmRlcmluZyBhdiBodm9yIGtvbnNlbnRyZXJ0L3NwcmVkdCBlbiBuw6ZyaW5nIGVyIGZvcmRlbHQgbWVsbG9tIGtvbW11bmVuZSBpIHJlZ2lvbmVuLCBiYXNlcnQgcMOlIGJlcmVnbmluZ2VyIGF2IGRlbiByb21saWdlIEdpbmktaW5kZWtzZW4uCi0gICBWdXJkZXJlIG9tIHNhbW1lbmxpZ25pbmdzZ3J1bm5sYWdldCBiw7hyIHbDpnJlIHNhbWxldCBzeXNzZWxzZXR0aW5nIGkgcmVnaW9uZW4sIGVsbGVyIHNhbWxldCBzeXNzZWxzZXR0aW5nIGF2IG5hc2pvbmVuLCBvZyBmaW5uZSB1dCBodmlsa2VuIHJvbGxlIGRldCBzcGlsbGVyIG9tIGVuIGJydWtlciByZWdpb25hbGUgZWxsZXIgbmFzam9uYWxlIGFuc2xhZyBmb3Igc2FtbGV0IHN5c3NlbHNldHRpbmcuCi0gICBGaW5uZSB1dCBvbSBuw6ZyaW5nc3N0cnVrdHVyZW4gaSByZWdpb25lbiBoYXIgYmxpdHQgbWVyIGVsbGVyIG1pbmRyZSBkaXZlcnNpZmlzZXJ0LCBtYW5nZm9sZGlnLCBvdmVyIHRpZC4KLSAgIEJlcmVnbmUgZW4gcmVnaW9uYWwgbWFuZ2ZvbGQtaW5kZWtzIG9nIGZpbm5lIHV0IGh2b3JkYW4gdmVyZGllbmUgcMOlIGVuIHNsaWsgaW5kZWtzIGVyIGVuZHJldCBvdmVyIHRpZC4KLSAgIFZ1cmRlcmUgb20gc3lzc2Vsc2V0dGluZ3NhbmRlbGVuZSBza2FsIHNhbW1lbmxpZ25lcyBtZWQgbmFzam9uYWxlIGVsbGVyIHJlZ2lvbmFsZSBhbmRlbGVyIGZvciBkZSB1bGlrZSBuw6ZyaW5nZW5lCi0gICBHamVudGEgYmVyZWduaW5nZXIgZm9yIGFuZGVsZXIgYXYgYXJiZWlkc3Rha2VyZSBpIHVsaWtlIG7DpnJpbmdlciwgbG9rYWxpc2VyaW5nc2t2b3RpZW50ZXIsIGRlbiByb21saWdlIEdpbmktIGtvZWZmaXNpZW50ZW4gb2cgbcOlbGV0IGZvciBtYW5nZm9sZCBhdiBuw6ZyaW5nZXIsIG1lZCB1dGdhbmdzcHVua3QgaSBkYXRhIHNwZXNpZmlzZXJ0IGV0dGVyIGFyYmVpZHN0YWtlcm5lcyBib3N0ZWQuCi0gICBTYW1tZW5saWduZSByZXN1bHRhdGVuZSBmb3IgZGF0YSBldHRlciBhcmJlaWRzc3RlZCwgb2cga29tbWVudGVyIGh2aWxrZW4gaW5mb3JtYXNqb24gcmVzdWx0YXRlbmUgZ2lyIG9tIHJvbWxpZyBtb2JpbGl0ZXQgaSBhcmJlaWRzbWFya2VkZXQuCi0gICBHaSBlbiBrb3J0IG92ZXJzaWt0IG92ZXIgcGVuZGxlcnN0csO4bW1lciBtZWxsb20ga29tbXVuZW5lIGkgcmVnaW9uZW4KLSAgIEJlcmVnbmUgb2cgcHJlc2VudGVyZSBhbmRlbGVyIGF2IGFyYmVpZHN0YWtlcmUgbWVkIGJvc3RlZCBpIGVuIGtvbW11bmUgc29tIGhhciBhcmJlaWRzc3RlZCBpIGFuZHJlIGtvbW11bmVyLCBvZyBnasO4ciBkZXQgc2FtbWUgZm9yIGFuZGVsZW4gYXYgam9iYmVuZSBpIGVuIGtvbW11bmUgc29tIGVyIGJlc2F0dCBhdiBhcmJlaWRzdGFrZXJlIGZyYSBhbmRyZSBrb21tdW5lci4KLSAgIERpc2t1dGVyZSBmb3Jza2plbGxlciBtZWxsb20ga29tbXVuZW5lIGkgcmVnaW9uZW4sIG9nIGRyw7hmdCB1dHZpa2xpbmdlbiBvdmVyIHRpZCBmb3IgdWxpa2Uga29tbXVuZXIKLSAgIEJlcmVnbmUgb2cgcHJlc2VudGVyZSBhbmRlbGVuIGF2IGFyYmVpZHN0YWtlcmUgc29tIGJvciBvZyBqb2JiZXIgaW5uZW5mb3Igc2FtbWUga29tbXVuZS4gU2Ugb20gZGV0IGVyIHN5c3RlbWF0aXNrZSBmb3Jza2plbGxlciBzZXR0IGkgZm9yaG9sZCB0aWwgc2VudHJhbGl0ZXQgb2cgdGlsZ2plbmdlbGlnaGV0IGkgZGV0IGxva2FsZSBhcmJlaWRzbWFya2VkZXQuIE9nIG9tIGRldCBlciBiZXN0ZW10ZSB0cmVuZGVyIGkgdXR2aWtsaW5nZW4gZm9yIHVsaWtlIGtvbW11bmVyLgotICAgQnJ1a2UgYmVyZWduaW5nZW5lIGF2IGxva2FsaXNlcmluZ2t2b3RpZW50ZXIgdGlsIMOlIGRlbGUgbsOmcmluZ2VuZSBpbm4gaSBsb2thbC0gb2cgYmFzaXNuw6ZyaW5nZXIKLSAgIEZvcm11bGVyZSBlbiDDuGtvbm9taXNrIGJhc2Vtb2RlbGwgb2cgYmVyZWduZSDDuGtvbm9taXNrZSBiYXNlbXVsaXBsaWthdG9yZXIgZm9yIGVua2VsdGtvbW11bmVyIG9nIHJlZ2lvbihlcikuCi0gICBWdXJkZXJlIGxva2FsZSB2aXJrbmluZ2VyIGF2IGFsdGVybmF0aXZlIGxva2FsaXNlcmluZ2VyIGkgT2RkYSwgSHVzbmVzIG9nIExlaXJ2aWsKLSAgIERyw7hmdGUgdmlya25pbmdlciBhdiBldCBzbGlrdCBwb3NpdGl2dCBla3NvZ2VudCBzam9rayBmb3IgZGVuIGxva2FsZSDDuGtvbm9taWVuIGdqZW5ub20gYnJ1ayBhdiBlbiBiYXNlbW9kZWxsCi0gICBGaW5uZSB1dCBodm9yZGFuIHZpcmtuaW5nZW5lIGV2ZW50dWVsdCBzcHJlcyB0aWwgYW5kcmUga29tbXVuZXIgaSByZWdpb25lbiBvZyBodm9yZGFuIGVuIGthbiBicnVrZSBkYXRhIGZvciBwZW5kbGVzdHLDuG1tZXIgdGlsIMOlIHByZWRpa2VyZSB2aXJrbmluZ2VyIHDDpSBzeXNzZWxzZXR0aW5nZW4gaSB1bGlrZSBrb21tdW5lci4KLSAgIFNhbW1lbmxpZ25lIGRpc3NlIHByZWRpa3Nqb25lbmUgbWVkIGRlIHZpIGbDpXIgbsOlciB2aSBnamVubm9tZsO4cmVyIGFuYWx5c2VuIHDDpSByZWdpb25hbHQgbml2w6UuCi0gICBHaSBlbiBzaGlmdC1zaGFyZSBhbmFseXNlIGkgZW4gZGlza3Vzam9uIGF2IGZvcnNramVsbGVyIGkgdmVrc3QgZm9yIGVrc2VtcGVsIG1lbGxvbSBpbmRyZSwgbWlkdHJlIG9nIHl0cmUgZGVsZXIgYXYgcmVnaW9uZW4sIGVsbGVyIGV2ZW50dWVsdCBvbXLDpWRlci9rb21tdW5lciBzb20gaGFyIGhhdHQgc3Rlcmsgb2cgc3ZhayBiZWZvbGtuaW5nc3V0dmlrbGluZy4KCiMjIE92ZXJzaWt0IG92ZXIgYmVmb2xrbmluZ2VuZSBpIHJlZ2lvbmVuZQoKIyMjIEhhdWdhbGFuZGV0CgpIYXVnYWxhbmRldCBiZXN0w6VyIGF2IGtvbW11bmVuZSBCb2tuICg4NTIpLCBIYXVnZXN1bmQgKDM3MzU3KSwgS2FybcO4eSAoNDIxODYpLCBTYXVkYSAoNDU5NSksIFR5c3bDpnIoMTEwNjUpLCBVdHNpcmEoMTk4KSBvZyBWaW5kYWZqb3JkKDg3MTQpLgp0aWxzYW1tZW4gYm9yIGRldCAxMDQ5NjcgcGVyc29uZXIgaSBkZW5uZSByZWdpb25lbi4KaSB0aWRzcGVyaW9kZW4gdmkgaGFyIGhlbnRldCBpbm4gZGF0YSBoYXIgZGV0IHZlcnQga29tbXVuZXNhbW1lbnNsw6VpbmcgaSBkZW5uZSByZWdpb25lbi4KRGEgYmxlIMOYbGVuIG9nIHZpbmRhZmpvcmQgc2zDpXR0IGkgc2FtbWVuIHRpbCBlbiBrb21tdW5lIChodm9yZGFuIGhhciB2aSB0YXR0IGhlbnN5biB0aWwgZGV0dGU/Pz8pCgojIyMgU3VubmhvcmRsYW5kIG9nIFVsbGVuc3ZhbmcKClN1bm5ob3JkbGFuZCBvZyBVbGxlbnN2YW5nIGJlc3TDpXIgYXYga29tbXVuZW5lIELDuG1sbygxMTk1NyksIEV0bmUoNDA2MiksIEZpdGphcigzMTg5KSwgS3Zpbm5oZXJhZCgxMzA3MSksIFN0b3JkKDE4NzU5KSwgU3ZlaW8oNTc2NiksIFR5c25lcygyODY5KSBvZyBVbGxlbnN2YW5nKDExMDQ4KS4KVGlsc2FtbWVuIGJvciBkZXQgNzA3MjEgcGVyc29uZXIgaSBkZW5uZSByZWdpb25lbi4KClRhbGxlbmUgZXIgaGVudGV0IGZyYSBTU0IgMDkuMDEuMjEgKDxodHRwczovL3d3dy5zc2Iubm8vc3RhdGJhbmsvdGFibGUvMDEyMjMvdGFibGVWaWV3TGF5b3V0MS8+KSBnamVsZGVyIGZvciA0IGt2YXJ0YWwgMjAyMC4KCiJGb3JrbGFyIGxpdHQgb20gZGUgZm9yc2tqZWxsaWdlIG7DpnJpbmdlbmUiLi4uLi4gCgpgYGB7ciBjc3ZfZmlsZXJ9CnN5c3NlbF9hcmIgPC0gcmVhZF9jc3YoIkRhdGEvc3lzc2VsX2FyYi5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpobGRfYXJiIDwtIHJlYWRfY3N2KCJEYXRhL2hsZF9hcmIuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKc3VuX2FyYiA8LSByZWFkX2NzdigiRGF0YS9zdW5fYXJiLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCmhhcl9hcmIgPC0gcmVhZF9jc3YoIkRhdGEvaGFyX2FyYi5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpzeXNzZWxfYm9zIDwtIHJlYWRfY3N2KCJEYXRhL3N5c3NlbF9ib3MuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKaGxkX2JvcyA8LSByZWFkX2NzdigiRGF0YS9obGRfYm9zLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCnN1bl9ib3MgPC0gcmVhZF9jc3YoIkRhdGEvc3VuX2Jvcy5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpoYXJfYm9zIDwtIHJlYWRfY3N2KCJEYXRhL2hhcl9ib3MuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKUGVuZGxpbmcgPC0gcmVhZF9jc3YoIkRhdGEvUGVuZGxpbmcuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKaGdsX1BlbmRsaW5nIDwtIHJlYWRfY3N2KCJEYXRhL2hnbF9QZW5kbGluZy5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpzdW5fUGVuZGxpbmcgPC0gcmVhZF9jc3YoIkRhdGEvc3VuX1BlbmRsaW5nLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCmBgYAoKIyAxIFN5c3NlbHNldHRpbmcgaSB1bGlrZSBuw6ZyaW5nZXIsIGV0dGVyIGFyYmVpZHNzdGVkCgojIyBIYXVnYWxhbmRldAoKRsO4cnN0ZSByZWdpb25lbiB2aSB2ZWxnZXIgw6Ugc2UgcMOlIGVyIEhhdWdhbGFuZGV0LgpIZXIgw7huc2tlciB2aSDDpSBzZSBww6UgdXR2aWtsaW5nZW4gZnJhIDIwMDggdGlsIDIwMjAsIGF2IGFudGFsbCBhbnNhdHRlIGkgc2luIGhlbGhldCBpIHJlZ2lvbmVuLCBzYW10IGRlIDYgbWVzdCByZWxldmFudGUgbsOmcmluZ2VuZS4KCmBgYHtyIEFyYmVpZHNzdGVkX0hhdWdhbGFuZGV0XzF9CmhsZF9hcmIgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMTogSGF1Z2FsYW5kZXQiKSsKICB5bGFiKCJBbnRhbGwgYW5zYXR0ZSBpICBcbiBhbGxlIG7DpnJpbmdlciIpICsKICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoYW5nbGU9MCkpKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkKYGBgCgpJIDIwMjAgZXIgZGV0IGkgdW5kZXJrYW50IGF2IDUwIDAwMCBhbnNhdHRlIGkgYWxsZSBuw6ZyaW5nZXIgcMOlIEhhdWdhbGFuZGV0LgpBdiBGaWcuCjEgc2VyIHZpIGF0IEhhdWdhbGFuZGV0IGZpa2sgZW4gbmVkZ2FuZyBpIGFudGFsbCBhbnNhdHRlIGkgMjAxNSBvZyAyMDE2LgpJIDIwMTcgb2cgMjAxOCBibGUgZGV0IHZla3N0LCBmcmVtIHRpbCBkZXQgc251ZGRlIGkgMjAxOSBpZ2plbi4KCmBgYHtyIEFyYmVpZHNzdGVkX0hhdWdhbGFuZGV0XzJ9CnN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSBjKDExMDYsIDExMzUsIDExNDUsIDExNDYsIDExNDksIDExNTEsIDExNjApKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IGBBbGxlIE7DpnJpbmdlcmAsIChhbmdsZT0wKSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGdlb21fbGluZShhZXMoZ3JvdXAgPSBrbmF2biwgY29sb3VyID0ga25hdm4pKSArCiAgc2NhbGVfc2l6ZV9tYW51YWwodmFsdWVzID0gYyhzZXEoMi4wLCAyLCBieSA9IC0wLjEpKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDApICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjogSGF1Z2FsYW5kZXQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUgaSAgXG4gYWxsZSBuw6ZyaW5nZXIiKSArCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTApKSsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpJIEZpZy4KMiBzZXIgdmkgYXQgZmxlcmUgYXYga29tbXVuZW5lIHDDpSBIYXVnYWxhbmRldCBoYXIgaGF0dCBsaXRlbiBhcmJlaWRzcGxhc3N2ZWtzdCwgbWVkIHVubnRhayBhdiBUeXN2w6ZyLCBWaW5kYWZqb3JkIG9nIEthcm3DuHkgaSBkZW4gc2lzdGUgdGnDpXJzcGVyaW9kZW4uClZpIHNlciBkZXR0ZSBtZXIgdHlkZWxpZyBww6UgZmlnLgozIG9nIDQuCgpgYGB7ciBobGRfYXJiX2xvbmd9CmhsZF9hcmJfbG9uZyA8LSBzeXNzZWxfYXJiICU+JQogIHBpdm90X2xvbmdlcigKICAgIGNvbHMgPSBgQWxsZSBOw6ZyaW5nZXJgOlVvcHBnaXR0LAogICAgbmFtZXNfdG8gPSAiTsOmcmluZyIsCiAgICB2YWx1ZXNfdG8gPSAiQW5zYXR0ZSIpCmBgYAoKYGBge3IgTsOmcmluZ19Ub3RhbF9IYXVnYWxhbmRldF8zX1N0w7hyc3RlX0FyYmVpZHN0ZWR9CmhsZF9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiSGF1Z2VzdW5kIiwgIkthcm3DuHkiLCAiVmluZGFmam9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAzOiBIYXVnYWxhbmRldDogSGF1Z2VzdW5kLCBLYXJtw7h5IG9nIFZpbmRhZmpvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKSArIAogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhdWdhbGFuZGV0XzRfTWluc3RlX0FyYmVpZHN0ZWR9CmhsZF9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQm9rbiIsICJTYXVkYSIsICJUeXN2w6ZyIiwgIlV0c2lyYSIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiA0OiBIYXVnYWxhbmRldDogQm9rbiwgU2F1ZGEgVHlzdsOmciBvZyBVdHNpcmEiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKSArIAogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkKYGBgCgpGaWd1ciAzIG9nIDQgdmlzZXIgdXR2aWtsaW5nZW4gYXYgZGV0IHRvdGFsZSBhbnRhbGwgYW5zYXR0ZSBpIGFsbGUgbsOmcmluZ2VyIHDDpSBrb21tdW5hbHQgbml2w6UsIGlubmVuZm9yIEhhdWdhbGFuZC1yZWdpb25lbi4KCkkgZGlzc2UgZmlndXJlbmUsIHPDpSBzZXIgdmkgdHlkZWxpZyBhdCBIYXVnZXN1bmQgaGFyIGhhdHQgcmVkdWtzam9uIGkgYW50YWxsIGFuc2F0dGUgdG90YWx0IHNldHQsIG1lbnMgS2FybcO4eSwgVmluZGFmam9yZCBvZyBUeXN2w6ZyIGhhciBoYXR0IGVuIG1hcmthbnQgdmVrc3QgZGUgc2lzdGUgdGkgw6VyZW5lLgpTaWRlbiBIYXVnZXN1bmQgaGFyIGZsZXN0IGFyYmVpZHNwbGFzc2VyIGJldHlyIHV0dmlrbGluZ2VuIGkgSGF1Z2VzdW5kIG15ZSBmb3IgZGUgc2FtbGVkZSB0YWxsZW5lLgoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhdWdlbGFuZGV0XzNfU3TDuHJzdGVfQXJiZWlkc3N0ZWR9CmhsZF9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiSGF1Z2VzdW5kIiwgIkthcm3DuHkiLCAiVmluZGFmam9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDU6IEhhdWdhbGFuZGV0OiBIYXVnZXN1bmQsIEthcm3DuHkgb2cgVmluZGFmam9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfSGF1Z2VsYW5kZXRfNF9NaW5zdGVfQXJiZWlkc3N0ZWR9CmhsZF9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQm9rbiIsICJTYXVkYSIsICJUeXN2w6ZyIiwgIlV0c2lyYSIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDY6IEhhdWdhbGFuZGV0OiBCb2tuLCBTYXVkYSwgVHlzdsOmciBvZyBVdHNpcmEiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKRmlndXIgNSBvZyA2IHZpc2VyIHV0dmlrbGluZ2VuIGF2IGRlIDYgbWVzdCByZWxldmFudGUgbsOmcmluZ2VuZSBpIEhhdWdhbGFuZHNyZWdpb25lbiBww6Uga29tbXVuZSBuaXbDpS4KClZpIHNlciBpIGRlIHRyZSBzdMO4cnN0ZSBrb21tdW5lbmUsIEhhdWdlc3VuZCwgS2FybcO4eSBvZyBWaW5kYWZqb3JkIHV0Z2rDuHIgbsOmcmluZ2VuZSBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIG9nIEluZHVzdHJpIGRlIHN0w7hyc3RlLgpIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIGhhciB2b2tzdCBqZXZudCBvZyB0cnV0dCBkZSBzaXN0ZSB0acOlcmVuZSwgbWVucyBhbnRhbGwgYW5zYXR0ZSBpIGluZHVzdHJpbsOmcmluZ2VuIGhhciB2YXJpZXJ0IGZyYSBrb21tdW5lIHRpbCBrb21tdW5lLgpJIEhhdWdhbGFuZGV0IHV0Z2rDuHIgcHJpbcOmcm7DpnJpbmdlciAoam9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlKSBlbiBzdMO4cnJlIGFuZGVsLCBlbm4gaG9zIEthcm3DuHkgb2cgSGF1Z2VzdW5kIGh2b3IgcHJpbcOmcm7DpnJpbmdlbmUga3VuIHV0Z2rDuHJlIGVuIGxpdGVuIGFuZGVsLgoKIyMjIFN5c3NlbHNldHRpbmdzdXR2aWtsaW5nZW4gZm9yIHVsaWtlIG7DpnJpbmdlciBpIHVsaWtlIGtvbW11bmVyIG9nIGZvciByZWdpb25lbiBzYW1sZXQuCgpEZXQgZXIgcmVsYXRpdnQgc3RvcmUga29tbXVuZXZpc2UgZm9yc2tqZWxsZXIgaSBuw6ZyaW5nc3N0cnVrdHVyZW4uClJvZ2FsYW5kIGhhciBlbiBmb3Job2xkc3ZpcyBlbnNpZGlnIG7DpnJpbmdzc3RydWt0dXIsIG9samUgb2cgZ2FzcyBlciBkb21pbmVyZW5kZS4KRnlsa2V0IGVyIHN1dmVyZW50IGRvbWluZXJlbmRlIGZvciBmb3NzaWwgZW5lcmdpLgpEZSBoYXIgZm9yIMO4dnJpZyBkZSBzaXN0ZSDDpXJlbmUgc2F0c2V0IHDDpSBldCBlbiBtZXIgZGlmZmVyZW5zaWVydCBuw6ZyaW5nc3N0cnVrdHVyIG9nIG7DpnJpbmdzbGl2IHZlZCDDpSBzYXRzZSBww6UgaGVsc2UsIElLVCBvZyBmb3JueWJhciBlbmVyZ2kuCgpJIHbDpXJlIG1vZGVsbGVyLCBlciBzYXRzaW5nZW4gcMOlIGhlbHNlIGRlbiBtZXN0IHR5ZGVsaWdlLgpBdiByZW50IHRla25pc2tlIGdydW5uZXIgZXIgZGV0IHZhbnNrZWxpZyDDpSBzZSB1dHZpa2xpbmdlbiBpIGVua2VsdGUgbsOmcmluZ2VyIHNvbSB1dGdqw7hyIHNtw6UgYW5kZWxlciwgcMOlIGdydW5uIGF2IHNrYWxhZW4gc29tIGVyIGJlbnl0dGV0LgpUaWwgdHJvc3MgZm9yIGRldHRlLCBrYW4gbWFuIHNlIGF0IG7DpnJpbmdzc3RydWt0dXJlbiBpIHJlZ2lvbmVuIHNhbWxldCBnZW5lcmVsdCBzZXR0IGhhciBlbmRyZXQgc2VnIGxpdGUuCgpSb2dhbGFuZCBoYXIgZ29kZSBqb3JkYnJ1a3NtdWxpZ2hldGVyLCBtZW4gaSBGaWcuCjI6IEhhdWdhbGFuZGV0IHNlciB2aSBlbiBuZWRnYW5nIGkgc3lzc2Vsc2V0dGluZ2VuIGRlIHNpc3RlIHRpw6VyZW5lLCBtZW5zIGRldCBlciBlbiBtYXJnaW5hbCDDuGtuaW5nIGkgU3VubmhvcmRhbGFuZCwgamYuCkZpZyA5LgpJIEZpZy4KMTI6IHNlciB2aSBhdCBUeXNuZXMgaGFyIGhhdHQgZW4gbWFya2FudCDDuGtuaW5nIGkgcHJpbcOmcm7DpnJpbmdlbiwgcmVsYXRpdnQgc2V0dC4KClVuaXZlcnNpdGV0cy0gb2cgaMO4Z3Nrb2xlc2VrdG9yZW4gZXIgbGl0ZW4gaSBSb2dhbGFuZCwgb2cgZGVuIGJlc3TDpXIgZm9yIGRldCBmw7hyc3RlIGF2IFVuaXZlcnNpdGV0ZXQgaSBTdGF2YW5nZXIgKFVpUykgb2cgSMO4Z3NrdWxlbiBww6UgVmVzdGxhbmRldCAoSFZMKSBtZWQgY2FtcHVzIEhhdWdlc3VuZC4KCkhhdWdhbGFuZCBWZWtzdCwgc29tIGVyIGVpZ2QvZHJldmV0IGF2IEhhdWdhbGFuZHNyZWdpb25lbiBlciBpIHNwaXNzZW4gcMOlIMOlIGxlZ2dlIHRpbCByZXR0ZSBmb3Igw6UgZXRhYmxlcmUgbnkgaW5kdXN0cmkgc2FtdCBhbmRyZSBhcmJlaWRzcGxhc3NlciBpIHJlZ2lvbmVuLgoKSSBoZWxzZXNla3RvcmVuIGVyIFN0YXZhbmdlciB1bml2ZXJzaXRldHNzeWtlaHVzIChTdVMpIHNlbnRyYWx0LgoKIyMgU3VubmhvcmRsYW5kCgpWaWRlcmUgw7huc2tlciB2aSDDpSBzZSBww6UgZGVuIHNhbW1lIHV0dmlrbGluZ2VuLCBtZW4gZGVubmUgZ2FuZ2VuIGkgU3VubmhvcmRsYW5kc3JlZ2lvbmVuLgoKYGBge3IgQXJiZWlkc3N0ZWRfU3VubmhvcmRsYW5kXzF9CnN1bl9hcmIgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gNzogU3VubmhvcmRhbGFuZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSBpICBcbiBhbGxlIG7DpnJpbmdlciIpICsKICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoYW5nbGU9MCkpKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMSkpCmBgYAoKSGVyIHZpc2VyIGZpZ3VyIDcgdXR2aWtsaW5nZW4gdGlsIGRlbiB0b3RhbGUgc3VtbWVuIGF2IGFuc2F0dGUgaSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gZnJhIDIwMDggdGlsIDIwMjAuClN1bm5ob3JkYWxhbmQgaGFyIGkgMjAyMCBpIHVuZGVya2FudCBhdiAyNSA1MDAgYW5zYXR0ZS4KVmkgc2VyIHV0IGlmcsOlIGZpZ3VyZW4gYXQgU3VubmhvcmRsYW5kc3JlZ2lvbmVuIGhhZGRlIGVpbiBtYXJrYW50IHZla3N0IGlmcsOlIDIwMDggdGlsIDIwMTQgbWVkIHBlcmlvZGFyIG1lZCBzdmFrIG5lZGdhbmcuCkZyYSAyMDE0IGhhciBkZXQgdsOmcnQgZW4gcmVkdWtzam9uIGkgdG90YWx0IGFudGFsbCBhbnNhdHRlLgoKYGBge3IgQXJiZWlkc3N0ZWRfU3VubmhvcmRsYW5kXzJ9CnN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSBjKDQ2MTEsIDQ2MTIsIDQ2MTMsIDQ2MTQsIDQ2MTUsIDQ2MTYsIDQ2MTcpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IGBBbGxlIE7DpnJpbmdlcmApKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBnZW9tX2xpbmUoYWVzKGdyb3VwID0ga25hdm4sIGNvbG91ciA9IGtuYXZuKSkgKwogIHNjYWxlX3NpemVfbWFudWFsKHZhbHVlcyA9IGMoc2VxKDIuMCwgMiwgYnkgPSAtMC4xKSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKSArCiAgIGxhYnModGl0bGUgPSAiRmlnLiA4OiBTdW5uaG9yZGxhbmQiLCB4ID0gIsOFciIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpGaWd1ciA4IHZpc2VyIHV0dmlrbGluZ2VuIGF2IHRvdGFsdCBhbnNhdHRlIGkgU3VubmhvcmRsYW5kc3JlZ2lvbmVuIHDDpSBrb21tdW5lbml2w6UgaSBoZWxlIHJlZ2lvbmVuIGZyYSAyMDA4IHRpbCAyMDIwLgpEZW5uZSBmaWd1cmVuIGdpciBvc3MgZW4gb3ZlcnNpa3QsIG1lbiBlciBpa2tlIGhlaWx0IGJydWtlcnZlbm5lbGlnLgpWaSBsYWdlciBkZXJtZWQgZW4gbWVyIG92ZXJzaWt0bGlnIGZpZ3VyLCBqZi4KZmlndXIgOSAmIDEwLgoKYGBge3Igc3VuX2FyYl9sb25nfQpzdW5fYXJiX2xvbmcgPC0gc3lzc2VsX2FyYiAlPiUKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzID0gYEFsbGUgTsOmcmluZ2VyYDpVb3BwZ2l0dCwKICAgIG5hbWVzX3RvID0gIk7DpnJpbmciLAogICAgdmFsdWVzX3RvID0gIkFuc2F0dGUiKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfU3VubmhvcmRsYW5kXzNfU3TDuHJzdGVfQXJiZWlkc3RlZH0Kc3VuX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCw7htbG8iLCAiS3Zpbm5oZXJhZCIsICJTdG9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiA5OiBTdW5uaG9yZGxhbmQ6IELDuG1sbywgS3Zpbm5oZXJhZCBvZyBTdG9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMikpICsgCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfU3VubmhvcmRsYW5kXzRfTWluc3RlX0FyYmVpZHN0ZWR9CnN1bl9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiRXRuZSIsICJGaXRqYXIiLCAiU3ZlaW8iLCAiVHlzbmVzIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lICJBbGxlIE7DpnJpbmdlciIpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYWFyLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSwgb3B0aW9uID0gIkEiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDEwOiBTdW5uaG9yZGxhbmQ6IEV0bmUsIEZpdGhhciwgU3ZlaW8gb2cgVHlzbmVzIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKSArIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAyKSkgKyAKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCB2anVzdCA9IDAuNSwgaGp1c3Q9MSkpCmBgYAoKVmkgc2VyIGhlciB1dCBpZnJhIGZpZ3VyIDkgb2cgMTAgdXR2aWtsaW5nZW4gZm9yIGh2ZXIgZW5rZWx0IGtvbW11bmUgaSBTdW5uaG9yZGxhbmQgdG90YWx0IHNldHQsIG9nIGhlciBzZXIgdmkgbXllIHR5ZGxpZ2VyZSB1dHZpa2xpbmdlbiBmcmEgMjAwOCB0aWwgMjAyMC4KRW4ga2FuIHNlIGhlciBhdCBLdmlubmhlcmFkLCBFdG5lIG9nIEZpdGphciBoYXIgaGF0dCBlbiByZWR1a3Nqb24gaSB0b3RhbHQgYW5zYXR0ZSwgbWVucyBUeXNuZXMgb2cgU3ZlaW8gaGFyIGhhdHQgZWluIGtyYWZ0aWcgdmVrc3QuCkVuIGludGVyZXNzYW50IGJlbWVya2luZyBlciBTdG9yZCBpIDIwMTQgb2cgS3Zpbm5oZXJhZCBmcmEgMjAwOCB0aWwgMjAxNy4KCkZvciDDpSBmw6UgZXQgYmVkcmUgb3ZlcnNpa3Qgb3ZlciB1dHZpa2xpbmdlbiBpIGtvbW11bmVuIMO4bnNrZXIgdmkgw6Ugc2UgcMOlIGRlIDYgbWVzdCByZWxldmFudGUgbsOmcmluZ2VuZSBpIGh2ZXIga29tbXVuZS4KCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19TdW5uaG9yZGxhbmRfM19TdMO4cnN0ZV9BcmJlaWRzc3RlZH0Kc3VuX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCw7htbG8iLCAiU3RvcmQiLCAiS3Zpbm5oZXJhZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDExOiBTdW5uaG9yZGxhbmQ6IELDuG1sbywgS3Zpbm5oZXJhZCBvZyBTdG9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMikpICsgCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKQpgYGAKCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19TdW5uaG9yZGxhbmRfNF9NaW5zdGVfQXJiZWlkc3N0ZWR9CnN1bl9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiRXRuZSIsICJTdmVpbyIsICJGaXRqYXIiLCAiVHlzbmVzIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMTI6IFN1bm5ob3JkbGFuZDogRXRuZSwgRml0amFyLCBTdmVpbyBvZyBUeXNuZXMiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKRmlndXIgMTEgb2cgMTIgdmlzZXIgZGUgNiBtZXN0IHJlbGV2YW50ZSBuw6ZyaW5nZW5lIGkgaHZlciBlbmtlbHQga29tbXVuZSBpIFN1bm5ob3JkbGFuZHNyZWdpb25lbiBmcmEgMjAwOCB0aWwgMjAyMC4KCkVuIHNlciB1dCBpZnJhIGZpZ3VyIDExIGF0IGkgZGUgdHJlIHN0w7hyc3RlIGtvbW11bmVuZSwgKkLDuG1sbyosICpLdmlubmhlcmFkKiBvZyAqU3RvcmQqIHPDpSBoYXIgZGUgYWxsZSBoYXR0IGVuIHJlZHVrc2pvbiBpIGluZHVzdHJpZW4sIHNhbXRpZGlnIHNvbSBkZSBoYXIgaGF0dCBlbiB2ZWtzdCBpIGhlbHNlLSBvZyBzb3NpYWx0amVuZXN0ZXIuClR5c25lcyBoYXIgdsOmcnQgc3RhYmlsIG7DpXIgZGV0IGtvbW1lciB0aWwgaW5kdXN0cmksIG1lbiBoYXIgc2V0dCBlaW4gbWFya2FudCB2ZWtzdCBpIHByaW3DpnJuw6ZyaW5nZW4gKEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZSkuCgojIyMgU3lzc2Vsc2V0dGluZ3N1dHZpa2xpbmdlbiBmb3IgdWxpa2UgbsOmcmluZ2VyIGkgdWxpa2Uga29tbXVuZXIgb2cgZm9yIHJlZ2lvbmVuIHNhbWxldC4KCkRldCBmw7hyc3RlIGJlbWVya2Vsc2VzdmVyZGlnZSBpIFN1bm5ob3JkbGFuZHNyZWdpb25lbiBlciBkZW4gbWFya2FudGUgcmVkdWtzam9uZW4gaSBpbmR1c3RyaSBpIFN0b3JkIGtvbW11bmUgaSAyMDE0LCBzYW10IEt2aW5uaGVyYWQgZnJhIDIwMDguCkRldHRlIHN0ZW1tZXIgb3ZlcmVucyBtZWQgdG8gaGVuZGVsc2VyLgpEZW4gZsO4cnN0ZSBlciBvbGpla25la2tlbiBpIDIwMTQgc29tIG1lZGbDuHJ0ZSBhdCBibC5hLgpBa2VyIFN0b3JkIEFTIHNvbSBlciBhdmhlbmdpZyBhdiBPbGplLWluZHVzdHJpZW4gbcOldHRlIHBlcm1pdGVyZS4KClN0b3JkIGVyIGVuIGtvbW11bmUgc29tIGhhciBteWUgb2Zmc2hvcmUgaW5kdXN0cmkuCkkgMjAwOC8yMDA5IHPDpSBzdGVuZ3RlIFPDuHItTm9yZ2UgQWx1bWluaXVtICJCLUhhbGxlbiIgc29tIG1lZGbDuHJ0ZSA1MCUgcmVkdWtzam9uIGkgcHJvZHVrc2pvbiwgb2cgZGVybWVkIGFuc2F0dGUuCkludGVyZXNzYW50IMOlIGJlbWVya2UgYXQgaSBLdmlubmhlcmFkIHPDpSBlciBhbnRhbGwgaW5kdXN0cmlhcmJlaWRlcmUgcmVkdXNlcnQgc2FtdGlkaWcgc29tIGFudGFsbCBhbnNhdHRlIGkgSGVsc2UtIG9nIFNvc2lhbGV0amVuZXN0ZXIgw7hrdC4KQsO4bWxvIGhhciBvZ3PDpSBzZXR0IGVuIHN0YWJpbCByZWR1a3Nqb24gaSBhbnNhdHRlIGlubmVuIGluZHVzdHJpLCBzYW10IHZla3N0IGkgSGVsc2UtIG9nIFNvc2lhbGV0amVuZXN0ZXIgZnJlbSB0aWwgMjAxOC4KClNlciBlbiBww6UgaGVsZSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gaSBzaW4gaGVsaGV0LCBzw6Ugc2VyIHZpIGVuIHN2w6ZydCB0eWRlbGlnIHZla3N0IGlubmVuIEhlbHNlLSBvZyBTb3NpYWxldGplbmVzdGVyLCBvZyByZWR1a3Nqb24gaW5uZW4gaW5kdXN0cmkgaSBoZWxlIHJlZ2lvbmVuLgpLdmlubmhlcmFkLCBUeXNuZXMgb2cgRml0amFyIGhhciBvcHBsZXZkIGVpbiBtYXJrYW50IHZla3N0IGlubmVuIHByaW3DpnJuw6ZyaW5nLgoqKkthbiBkZXQgdmVyZSBlaW4gZ3J1bm4gdGlsIGRldHRlIHNvbSBidXJkZSBkaXNrdXRlcmFzdD8/KioKCiMgRm9ydHNldHQgSGVyIChPQSwgS0gpCgojIyBIYXJkYW5nZXIKClRpbCBzbHV0dCBtw6UgdmkgZ2plcmUgZGV0IHNhbW1lIG1lZCAqSGFyZGFuZ2VyKgoKSSBoZW5ob2xkIHRpbCBvcHBnYXZlbnMga3JhdiB0aWwgYmV0cmFrdGVyIHZpICpIYXJkYW5nZXIqIGbDuHIgMjAxOSBzb20gVWxsZW5zdmFuZy0gb2cgT2RkYSBrb21tdW5lIHNvbSB0byBzZXBhcmVydGUga29tbXVuZXIuCmkgMjAyMCBzw6UgYmxlIFVsbGVuc3ZhbmcsIE9kZGEgb2cgSm9uZGFsIHNsw6V0dCBzYW1tZW4gdGlsIFVsbGVuc3ZhbmcuCkRldHRlIGZvcmtsYXJlciBkZW4gdm9sZHNvbW1lIMO4a25pbmdlbiBpIHN5c3NlbHNldHRpbmcgaSByZWdpb25lbiB2ZWQgdGlkc3B1bmt0ZXQgZm9yIGtvbW11bmVzYW1tZW5zbMOlaW5nLgoKYGBge3IgQXJiZWlkc3N0ZWRfSGFyZGFuZ2VyXzF9Cmhhcl9hcmIgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMTM6IEhhcmRhbmdlciIsIHk9ICJBbGxlIE7DpnJpbmdlciIpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKQpgYGAKCmBgYHtyIEFyYmVpZHNzdGVkX0hhcmRhbmdlcl8yfQpzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjE4LCAxMjI4KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJyMxMTExMTEnLCcjMDU0OTg3JykpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIkZpZy4gMTQ6IEhhcmRhbmdlciIsIHggPSAiw4VyIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIGhhcl9hcmJfbG9uZ30KaGFyX2FyYl9sb25nIDwtIHN5c3NlbF9hcmIgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhcmRhbmdlcl9BcmJlaWRzdGVkfQpoYXJfYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIk9kZGEiLCAiVWxsZW5zdmFuZyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxNTogSGFyZGFuZ2VyOiBPZGRhIG9nIFVsbGVuc3ZhbmciLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhcmRhbmdlcl9BcmJlaWRzc3RlZH0KaGFyX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJPZGRhIiwgIlVsbGVuc3ZhbmciKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxNjogSGFyZGFuZ2VyOiBPZGRhLCBVbGxlbnN2YW5nIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKClVsbGVuc3Zhbmcga29tbXVuZSBoYXIgc3RvciBrcmFmdHByb2R1a3Nqb24gb2cgaG92ZWRuw6ZyaW5nZW4gZXIgaW5kdXN0cmkuCk1ham9yaXRldGVuIGF2IGtyYWZ0cHJvZHVrc2pvbmVuIGZvcmVnw6VyIGkgdGlkbGlnZXJlIE9kZGEuCk9kZGEgZXIgZXQgZW5zaWRpZyBpbmR1c3RyaXN0ZWQsIG1lbiBoYXIgb2dzw6UgZW4gbWFyaXRpbSBuw6ZyaW5nIGkgdGlsbGVnZy4KSSBmaWd1ciAxNiBzZXIgdmkgYXQgaW5kdXN0cmluw6ZyaW5nZW4gdXRnasO4ciBlbiBiZXRyYWt0ZWxpZyBzdMO4cnJlIGFuZGVsIGF2IHN5c3NlbHNldHRpbmdlbiBpIGhlci4KSW5kdXN0cmluw6ZyaW5nZW4gZXIgb2dzw6Ugb21mYXR0ZXQgb2cgYnlnZy0gb2cgYW5sZWdnc3Zpcmtzb21oZXQuClDDpSBtb3RzYXR0IHNpZGUgZXIgam9yZGJydWssIGhlbHNlLSBvZyBzb3NpYWx0amVuZXN0ZXIgZG9taW5lcmVuZGUgaSBVbGxlbnN2YW5nLgoKKipHZW5lcmVsdCBvbSBVbGxlbnN2YW5nIGtvbW11bmUqKgoKVWxsZW5zdmFuZyBrb21tdW5lIChtZWQgT2RkYSkgaGFyIGhhdHQgZW4gamV2biBvZyBuZWdhdGl2IGJlZm9sa25pbmdzdmVrc3QgaSBtYW5nZSB0acOlci4KRGV0IGdqZW5zcGVpbGVzIGlra2UgdHlkZWxpZyBpIHbDpXJlIG1vZGVsbGVyIHDDpSBncnVubiBhdiBza2FsYWVuIHNvbSBlciBicnVrdC4KSSB0aWxsZWdnIGhhciB2aSBpa2tlIGhlbnN5bnRhdHQgaW5udmFuZHJlbmRlIGFyYmVpZGVyZSwgZWxsZXIgbWlkbGVydGlkaWdlIGZyYWZseXR0ZWRlIHNvbSBmb3IgZWtzZW1wZWwgc3R1ZGVudGVyLgoKIyAyCgpGaW5uZXIgbG9rYWxpc2VyaW5nc2t2b3RpZW50ZXIgZm9yIHVsaWtlIG7DpnJpbmdlciBpIHVsaWtlIGtvbW11bmVyLCBvZyBmb3IgcmVnaW9uZW4gc2FtbGV0CgpgYGB7cn0KI29yZG5lciBldHRlciBrb21tdW5lbmF2biBvZyDDpXIKdG1wIDwtIHN5c3NlbF9ib3MKYGBgCgpgYGB7cn0KaGF1MjAgPC0gc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGFhciA9PSAiMjAyMCIsIGtuYXZuID09ICJIYXVnZXN1bmQiKQpgYGAKCmBgYHtyfQooaGF1MjAkSW5kdXN0cmkvaGF1MjAkYEFsbGUgTsOmcmluZ2VyYCkKMTkwNS8xODEzNwpgYGAKCmBgYHtyfQpscV9zeXNzZWxfYm9zIDwtIHN5c3NlbF9ib3MgJT4lIAogIG11dGF0ZShFaXJfRXJfaW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfSm9yZGJydWsgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfVW5kZXJ2aXNuaW5nID0gVW5kZXJ2aXNuaW5nL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KHJlYWR4bCkKbmFzam9uYWx0X2Jvc3RlZCA8LSByZWFkX2V4Y2VsKCJEYXRhL25hc2pvbmFsdF9ib3N0ZWQueGxzeCIpCmBgYAoKYGBge3J9Cm5hc2pvbmFsdF9ib3N0ZWQgPC0gbmFzam9uYWx0X2Jvc3RlZCAlPiUgCiAgbXV0YXRlKEVpbl9Fbl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpbl9Fbl9Kb3JkYnJ1ayA9IGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpbl9Fbl9VbmRlcnZpc25pbmcgPSBVbmRlcnZpc25pbmcvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWluX0VuX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmApCmBgYAoKCmBgYHtyfQpMUV9ib3NfSm9yZGJydWsgPC0gbHFfc3lzc2VsX2JvcyU+JSAKICBzZWxlY3QoYWFyLCBrbmF2biwgRWlyX0VyX0pvcmRicnVrKSAlPiUgCiAgbXV0YXRlKGFhciA9IGFzLmNoYXJhY3RlcihhYXIpKSAlPiUgCiAgbGVmdF9qb2luKHNlbGVjdCguZGF0YSA9IG5hc2pvbmFsdF9ib3N0ZWQsIGFhciwgRWluX0VuX0pvcmRicnVrKSwgYnkgPSBjKCJhYXIiKSkgJT4lIAogIG11dGF0ZShhbmRlbCA9IEVpcl9Fcl9Kb3JkYnJ1ay9FaW5fRW5fSm9yZGJydWsKICApCgpMUV9ib3NfSW5kdXN0cmkgPC0gbHFfc3lzc2VsX2JvcyAlPiUgCiAgc2VsZWN0KGFhciwga25hdm4sIEVpcl9Fcl9pbmR1c3RyaSkgJT4lIAogIG11dGF0ZShhYXIgPSBhcy5jaGFyYWN0ZXIoYWFyKSkgJT4lIAogIGxlZnRfam9pbihzZWxlY3QoLmRhdGEgPSBuYXNqb25hbHRfYm9zdGVkLCBhYXIsIEVpbl9Fbl9JbmR1c3RyaSksIGJ5ID0gYygiYWFyIikpICU+JSAKICBtdXRhdGUoYW5kZWwgPSBFaXJfRXJfaW5kdXN0cmkvRWluX0VuX0luZHVzdHJpKQoKCkxRX2Jvc19VbmRlcnZpc25pbmcgPC0gbHFfc3lzc2VsX2JvcyAlPiUgCiAgc2VsZWN0KGFhciwga25hdm4sIEVpcl9Fcl9VbmRlcnZpc25pbmcpICU+JSAKICBtdXRhdGUoYWFyID0gYXMuY2hhcmFjdGVyKGFhcikpICU+JSAKICBsZWZ0X2pvaW4oc2VsZWN0KC5kYXRhID0gbmFzam9uYWx0X2Jvc3RlZCwgYWFyLCBFaW5fRW5fVW5kZXJ2aXNuaW5nKSwgYnkgPSBjKCJhYXIiKSkgJT4lIAogIG11dGF0ZShhbmRlbCA9IEVpcl9Fcl9VbmRlcnZpc25pbmcvRWluX0VuX1VuZGVydmlzbmluZykKCgpMUV9ib3NfSGVsc2UgPC0gbHFfc3lzc2VsX2JvcyAlPiUgCiAgc2VsZWN0KGFhciwga25hdm4sIEVpcl9Fcl9IZWxzZSkgJT4lIAogIG11dGF0ZShhYXIgPSBhcy5jaGFyYWN0ZXIoYWFyKSkgJT4lIAogIGxlZnRfam9pbihzZWxlY3QoLmRhdGEgPSBuYXNqb25hbHRfYm9zdGVkLCBhYXIsIEVpbl9Fbl9IZWxzZSksIGJ5ID0gYygiYWFyIikpICU+JSAKICBtdXRhdGUoYW5kZWwgPSBFaXJfRXJfSGVsc2UvRWluX0VuX0hlbHNlKQpgYGAKCmBgYHtyfQpzeXNzZWxfYm9zIDwtIHN5c3NlbF9ib3MgJT4lIAogIG11dGF0ZShMUV9ib3NfSm9yZGJydWsgPSBMUV9ib3NfSm9yZGJydWskYW5kZWwsCiAgICAgICAgIExRX2Jvc19JbmR1c3RyaSA9IExRX2Jvc19JbmR1c3RyaSRhbmRlbCwKICAgICAgICAgTFFfYm9zX1VuZGVydmlzbmluZyA9IExRX2Jvc19VbmRlcnZpc25pbmckYW5kZWwsCiAgICAgICAgIExRX2Jvc19IZWxzZSA9IExRX2Jvc19IZWxzZSRhbmRlbCkKYGBgCgpgYGB7cn0KTFFfYm9zIDwtIHN5c3NlbF9ib3MgJT4lIAogIHNlbGVjdChhYXIsIGtuYXZuLCBMUV9ib3NfSm9yZGJydWssIExRX2Jvc19JbmR1c3RyaSwgTFFfYm9zX1VuZGVydmlzbmluZywgTFFfYm9zX0hlbHNlKQpgYGAKCmBgYHtyfQpMUV9ib3NbaXMubmEoTFFfYm9zKV0gPSAwCmBgYAoKCgpGb3IgcmVnaW9uIEhhdWdhbGFuZDoKCmBgYHtyfQpobGRfYm9zX0xRIDwtIGhsZF9ib3MgJT4lIAogIG11dGF0ZShFaXJfRXJfaW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfSm9yZGJydWsgPSBgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfVW5kZXJ2aXNuaW5nID0gVW5kZXJ2aXNuaW5nL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgKQpgYGAKCmBgYHtyfQpMUWluZHVzdHJpX2hsZCA8LSBhc190aWJibGUoaGxkX2Jvc19MUSRFaXJfRXJfaW5kdXN0cmkvbmFzam9uYWx0X2Jvc3RlZCRFaW5fRW5fSW5kdXN0cmkpCkxRam9yZGJydWtfaGxkIDwtIGFzX3RpYmJsZShobGRfYm9zX0xRJEVpcl9Fcl9Kb3JkYnJ1ay9uYXNqb25hbHRfYm9zdGVkJEVpbl9Fbl9Kb3JkYnJ1aykKTFF1bmRlcnZpc25pbmdfaGxkIDwtIGFzX3RpYmJsZShobGRfYm9zX0xRJEVpcl9Fcl9VbmRlcnZpc25pbmcvbmFzam9uYWx0X2Jvc3RlZCRFaW5fRW5fVW5kZXJ2aXNuaW5nKQpMUWhlbHNlX2hsZCA8LSBhc190aWJibGUoaGxkX2Jvc19MUSRFaXJfRXJfSGVsc2UvbmFzam9uYWx0X2Jvc3RlZCRFaW5fRW5fSGVsc2UpCmBgYAoKYGBge3J9CmhsZF9ib3NfTFEgPC0gaGxkX2Jvc19MUSAlPiUgCiAgbXV0YXRlKExRaW5kdXN0cmkgPSBMUWluZHVzdHJpX2hsZCR2YWx1ZSwKICAgICAgICAgTFFqb3JkYnJ1ayA9IExRam9yZGJydWtfaGxkJHZhbHVlLAogICAgICAgICBMUXVuZGVydmlzbmluZyA9IExRdW5kZXJ2aXNuaW5nX2hsZCR2YWx1ZSwKICAgICAgICAgTFFoZWxzZSA9IExRaGVsc2VfaGxkJHZhbHVlKSAlPiUgCiAgc2VsZWN0KMOFciwgTFFpbmR1c3RyaSwgTFFqb3JkYnJ1aywgTFF1bmRlcnZpc25pbmcsIExRaGVsc2UpCmBgYAoKRm9yIFN1bm5ob3JkYWxhbmQ6CgpgYGB7cn0Kc3VuX2Jvc19MUSA8LSBzdW5fYm9zICU+JSAKICBtdXRhdGUoRWlyX0VyX2luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0pvcmRicnVrID0gYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX1VuZGVydmlzbmluZyA9IFVuZGVydmlzbmluZy9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCkKYGBgCgpgYGB7cn0KTFFpbmR1c3RyaV9zdW4gPC0gYXNfdGliYmxlKHN1bl9ib3NfTFEkRWlyX0VyX2luZHVzdHJpL25hc2pvbmFsdF9ib3N0ZWQkRWluX0VuX0luZHVzdHJpKQpMUWpvcmRicnVrX3N1biA8LSBhc190aWJibGUoc3VuX2Jvc19MUSRFaXJfRXJfSm9yZGJydWsvbmFzam9uYWx0X2Jvc3RlZCRFaW5fRW5fSm9yZGJydWspCkxRdW5kZXJ2aXNuaW5nX3N1biA8LSBhc190aWJibGUoc3VuX2Jvc19MUSRFaXJfRXJfVW5kZXJ2aXNuaW5nL25hc2pvbmFsdF9ib3N0ZWQkRWluX0VuX1VuZGVydmlzbmluZykKTFFoZWxzZV9zdW4gPC0gYXNfdGliYmxlKHN1bl9ib3NfTFEkRWlyX0VyX0hlbHNlL25hc2pvbmFsdF9ib3N0ZWQkRWluX0VuX0hlbHNlKQpgYGAKCmBgYHtyfQpzdW5fYm9zX0xRIDwtIHN1bl9ib3NfTFEgJT4lIAogIG11dGF0ZShMUWluZHVzdHJpID0gTFFpbmR1c3RyaV9zdW4kdmFsdWUsCiAgICAgICAgIExRam9yZGJydWsgPSBMUWpvcmRicnVrX3N1biR2YWx1ZSwKICAgICAgICAgTFF1bmRlcnZpc25pbmcgPSBMUXVuZGVydmlzbmluZ19zdW4kdmFsdWUsCiAgICAgICAgIExRaGVsc2UgPSBMUWhlbHNlX3N1biR2YWx1ZSkgJT4lIAogIHNlbGVjdCjDhXIsIExRaW5kdXN0cmksIExRam9yZGJydWssIExRdW5kZXJ2aXNuaW5nLCBMUWhlbHNlKQpgYGAKCkZvciBIYXJkYW5nZXI6CgpgYGB7cn0KaGFyX2Jvc19MUSA8LSBoYXJfYm9zICU+JSAKICBtdXRhdGUoRWlyX0VyX2luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0pvcmRicnVrID0gYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX1VuZGVydmlzbmluZyA9IFVuZGVydmlzbmluZy9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCkKYGBgCgpgYGB7cn0KTFFpbmR1c3RyaV9oYXIgPC0gYXNfdGliYmxlKGhhcl9ib3NfTFEkRWlyX0VyX2luZHVzdHJpL25hc2pvbmFsdF9ib3N0ZWQkRWluX0VuX0luZHVzdHJpKQpMUWpvcmRicnVrX2hhciA8LSBhc190aWJibGUoaGFyX2Jvc19MUSRFaXJfRXJfSm9yZGJydWsvbmFzam9uYWx0X2Jvc3RlZCRFaW5fRW5fSm9yZGJydWspCkxRdW5kZXJ2aXNuaW5nX2hhciA8LSBhc190aWJibGUoaGFyX2Jvc19MUSRFaXJfRXJfVW5kZXJ2aXNuaW5nL25hc2pvbmFsdF9ib3N0ZWQkRWluX0VuX1VuZGVydmlzbmluZykKTFFoZWxzZV9oYXIgPC0gYXNfdGliYmxlKGhhcl9ib3NfTFEkRWlyX0VyX0hlbHNlL25hc2pvbmFsdF9ib3N0ZWQkRWluX0VuX0hlbHNlKQpgYGAKCmBgYHtyfQpoYXJfYm9zX0xRIDwtIGhhcl9ib3NfTFEgJT4lIAogIG11dGF0ZShMUWluZHVzdHJpID0gTFFpbmR1c3RyaV9oYXIkdmFsdWUsCiAgICAgICAgIExRam9yZGJydWsgPSBMUWpvcmRicnVrX2hhciR2YWx1ZSwKICAgICAgICAgTFF1bmRlcnZpc25pbmcgPSBMUXVuZGVydmlzbmluZ19oYXIkdmFsdWUsCiAgICAgICAgIExRaGVsc2UgPSBMUWhlbHNlX2hsZCR2YWx1ZSkgJT4lIAogIHNlbGVjdCjDhXIsIExRaW5kdXN0cmksIExRam9yZGJydWssIExRdW5kZXJ2aXNuaW5nLCBMUWhlbHNlKQpgYGAKCiMjIyBHSU5JIFJlZ2lvbmFsdG5pdsOlCiMjIyMgSGF1Z2FsYW5kZXQKCmBgYHtyfQpobGRfYm9zX0dJTkkgPC0gaGxkX2JvcyAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChobGRfYm9zJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL25hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBobGRfYm9zJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoaGxkX2JvcyRJbmR1c3RyaS9uYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC0gaGxkX2JvcyRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKGhsZF9ib3MkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gaGxkX2JvcyRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9CmhsZF9ib3NfR0lOSSA8LSBobGRfYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhobGRfYm9zJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gaGxkX2JvcyRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhobGRfYm9zJEluZHVzdHJpIC8gaGxkX2JvcyRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhobGRfYm9zJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9obGRfYm9zJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKGhsZF9ib3NfR0lOSSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygiSGF1Z2FsYW5kZXQiPTgpKQpgYGAKCiMjIyBHSU5JIEtvbW11bmFsdCBuaXbDpQojIyMjIEhhdWdlc3VuZAoKYGBge3J9CkhhdWdfYm9zX0dJTkkgPC0gc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICIxMTA2IikKYGBgCgpgYGB7cn0KSGF1Z19ib3NfR0lOSSA8LSBIYXVnX2Jvc19HSU5JICU+JSAKICBtdXRhdGUoCiAgICBFaXJfRXJfUHJpbcOmciA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9IZWxzZSA9IG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhIYXVnX2Jvc19HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9CkhhdWdfYm9zX0dJTkkgPC0gSGF1Z19ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChIYXVnX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBIYXVnX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoSGF1Z19ib3NfR0lOSSRJbmR1c3RyaS9uYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC0gSGF1Z19ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKEhhdWdfYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gSGF1Z19ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9CkhhdWdfYm9zX0dJTkkgPC0gSGF1Z19ib3NfR0lOSSAlPiUKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoSGF1Z19ib3NfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYCAvIEhhdWdfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoSGF1Z19ib3NfR0lOSSRJbmR1c3RyaSAvIEhhdWdfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAvIG5hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoSGF1Z19ib3NfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvSGF1Z19ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZSgKICBIYXVnX2Jvc19HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJIYXVnZXN1bmQ6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgSGF1Z19ib3NfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJFaXIvRXIiID0gMywgIkVpbi9FbiIgPSAzLCAiTFEiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkhhdWdlc3VuZDogTG9rYWxrdm90aWVudCI9MTEpKQpgYGAKIyMjIEdJTkkgS29tbXVuYWx0IG5pdsOlCiMjIyMgQm9rbgoKYGBge3J9CkJva25fYm9zX0dJTkkgPC0gc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICIxMTQ1IikKYGBgCgpgYGB7cn0KQm9rbl9ib3NfR0lOSSA8LSBCb2tuX2Jvc19HSU5JICU+JSAKICBtdXRhdGUoCiAgICBFaXJfRXJfUHJpbcOmciA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9IZWxzZSA9IG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhCb2tuX2Jvc19HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9CkJva25fYm9zX0dJTkkgPC0gQm9rbl9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChCb2tuX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBCb2tuX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoQm9rbl9ib3NfR0lOSSRJbmR1c3RyaS9uYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC0gQm9rbl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKEJva25fYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gQm9rbl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9CkJva25fYm9zX0dJTkkgPC0gQm9rbl9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKEJva25fYm9zX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAgLyBCb2tuX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKEJva25fYm9zX0dJTkkkSW5kdXN0cmkgLyBCb2tuX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKEJva25fYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL0Jva25fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgQm9rbl9ib3NfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiQm9rbjogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBCb2tuX2Jvc19HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiQm9rbiI9MTEpKQpgYGAKIyMjIEdJTkkgS29tbXVuYWx0IG5pdsOlCiMjIyMgVHlzdsOmcgoKYGBge3J9ClR5c3ZfYm9zX0dJTkkgPC0gc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICIxMTQ2IikKYGBgCgpgYGB7cn0KVHlzdl9ib3NfR0lOSSA8LSBUeXN2X2Jvc19HSU5JICU+JSAKICBtdXRhdGUoCiAgICBFaXJfRXJfUHJpbcOmciA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9IZWxzZSA9IG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhUeXN2X2Jvc19HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9ClR5c3ZfYm9zX0dJTkkgPC0gVHlzdl9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChUeXN2X2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBUeXN2X2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoVHlzdl9ib3NfR0lOSSRJbmR1c3RyaS9uYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC0gVHlzdl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKFR5c3ZfYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gVHlzdl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9ClR5c3ZfYm9zX0dJTkkgPC0gVHlzdl9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKFR5c3ZfYm9zX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAgLyBUeXN2X2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKFR5c3ZfYm9zX0dJTkkkSW5kdXN0cmkgLyBUeXN2X2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKFR5c3ZfYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL1R5c3ZfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgVHlzdl9ib3NfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiVHlzdsOmcjogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBUeXN2X2Jvc19HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiVHlzdsOmciI9MTEpKQpgYGAKIyMjIEdJTkkgS29tbXVuYWx0IG5pdsOlCiMjIyMgS2FybcO4eQoKYGBge3J9Ckthcm1fYm9zX0dJTkkgPC0gc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICIxMTQ5IikKYGBgCgpgYGB7cn0KS2FybV9ib3NfR0lOSSA8LSBLYXJtX2Jvc19HSU5JICU+JSAKICBtdXRhdGUoCiAgICBFaXJfRXJfUHJpbcOmciA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9IZWxzZSA9IG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhLYXJtX2Jvc19HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9Ckthcm1fYm9zX0dJTkkgPC0gS2FybV9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChLYXJtX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBLYXJtX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoS2FybV9ib3NfR0lOSSRJbmR1c3RyaS9uYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC0gS2FybV9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKEthcm1fYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gS2FybV9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9Ckthcm1fYm9zX0dJTkkgPC0gS2FybV9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKEthcm1fYm9zX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAgLyBLYXJtX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKEthcm1fYm9zX0dJTkkkSW5kdXN0cmkgLyBLYXJtX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKEthcm1fYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL0thcm1fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgS2FybV9ib3NfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiS2FybcO4eTogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBLYXJtX2Jvc19HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiS2FybcO4eSI9MTEpKQpgYGAKCgojIDMgU3lzc2Vsc2V0dGluZyBpIHVsaWtlIG7DpnJpbmdlciwgZXR0ZXIgYm9zdGVkIChNb2RlbGxlciB1bmRlciBhcmJlaWQpCgojIyBIYXVnYWxhbmRldAoKYGBge3IgQm9zdGVkX0hhdWdhbGFuZGV0XzF9CmhsZF9ib3MgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMTc6IEhhdWdhbGFuZGV0IikrCiAgeWxhYigiQW50YWxsIGFuc2F0dGUgaSAgXG4gYWxsZSBuw6ZyaW5nZXIiKSArCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTApKSsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMSkpCmBgYAoKYGBge3IgQm9zdGVkX0hhdWdhbGFuZGV0XzJ9CnN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihrbnIgJWluJSBjKDExMDYsIDExMzUsIDExNDUsIDExNDYsIDExNDksIDExNTEsIDExNjApKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IGBBbGxlIE7DpnJpbmdlcmAsIChhbmdsZT0wKSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGdlb21fbGluZShhZXMoZ3JvdXAgPSBrbmF2biwgY29sb3VyID0ga25hdm4pKSArCiAgc2NhbGVfc2l6ZV9tYW51YWwodmFsdWVzID0gYyhzZXEoMi4wLCAyLCBieSA9IC0wLjEpKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDApICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMTg6IEhhdWdhbGFuZGV0IiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIGkgIFxuIGFsbGUgbsOmcmluZ2VyIikgKwogIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChhbmdsZT0wKSkrCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgaGxkX2Jvc19sb25nfQpobGRfYm9zX2xvbmcgPC0gc3lzc2VsX2JvcyAlPiUKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzID0gYEFsbGUgTsOmcmluZ2VyYDpVb3BwZ2l0dCwKICAgIG5hbWVzX3RvID0gIk7DpnJpbmciLAogICAgdmFsdWVzX3RvID0gIkFuc2F0dGUiKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfSGF1Z2FsYW5kZXRfM19TdMO4cnN0ZV9Cb3N0ZWR9CmhsZF9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiSGF1Z2VzdW5kIiwgIkthcm3DuHkiLCAiVmluZGFmam9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxOTogSGF1Z2FsYW5kZXQ6IEhhdWdlc3VuZCwgS2FybcO4eSBvZyBWaW5kYWZqb3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfSGF1Z2FsYW5kZXRfNF9NaW5zdGVfQm9zdGVkfQpobGRfYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkJva24iLCAiU2F1ZGEiLCAiVHlzdsOmciIsICJVdHNpcmEiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjA6IEhhdWdhbGFuZGV0OiBCb2tuLCBTYXVkYSBUeXN2w6ZyIG9nIFV0c2lyYSIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfSGF1Z2VsYW5kZXRfM19TdMO4cnN0ZV9Cb3N0ZWR9CmhsZF9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiSGF1Z2VzdW5kIiwgIkthcm3DuHkiLCAiVmluZGFmam9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDIxOiBIYXVnYWxhbmRldDogSGF1Z2VzdW5kLCBLYXJtw7h5IG9nIFZpbmRhZmpvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhdWdlbGFuZGV0XzRfTWluc3RlX0Jvc3RlZH0KaGxkX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCb2tuIiwgIlNhdWRhIiwgIlR5c3bDpnIiLCAiVXRzaXJhIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjI6IEhhdWdhbGFuZGV0OiBCb2tuLCBTYXVkYSwgVHlzdsOmciBvZyBVdHNpcmEiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKIyMgU3VubmhvcmRsYW5kCgpgYGB7ciBCb3N0ZWRfU3VubmhvcmRsYW5kXzF9CnN1bl9ib3MgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjM6IFN1bm5ob3JkYWxhbmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUgaSAgXG4gYWxsZSBuw6ZyaW5nZXIiKSArCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTApKSsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKQpgYGAKCmBgYHtyIEJvc3RlZF9TdW5uaG9yZGxhbmRfMn0Kc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGtuciAlaW4lIGMoNDYxMSwgNDYxMiwgNDYxMywgNDYxNCwgNDYxNSwgNDYxNiwgNDYxNykpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYWFyLCB5ID0gYEFsbGUgTsOmcmluZ2VyYCkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGdlb21fbGluZShhZXMoZ3JvdXAgPSBrbmF2biwgY29sb3VyID0ga25hdm4pKSArCiAgc2NhbGVfc2l6ZV9tYW51YWwodmFsdWVzID0gYyhzZXEoMi4wLCAyLCBieSA9IC0wLjEpKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDApICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMSkpICsKICAgbGFicyh0aXRsZSA9ICJGaWcuIDI0OiBTdW5uaG9yZGxhbmQiLCB4ID0gIsOFciIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBzdW5fYm9zX2xvbmd9CnN1bl9ib3NfbG9uZyA8LSBzeXNzZWxfYm9zICU+JQogIHBpdm90X2xvbmdlcigKICAgIGNvbHMgPSBgQWxsZSBOw6ZyaW5nZXJgOlVvcHBnaXR0LAogICAgbmFtZXNfdG8gPSAiTsOmcmluZyIsCiAgICB2YWx1ZXNfdG8gPSAiQW5zYXR0ZSIpCmBgYAoKYGBge3IgTsOmcmluZ19Ub3RhbF9TdW5uaG9yZGxhbmRfM19TdMO4cnN0ZV9Cb3N0ZWR9CnN1bl9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQsO4bWxvIiwgIkt2aW5uaGVyYWQiLCAiU3RvcmQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjU6IFN1bm5ob3JkbGFuZDogQsO4bWxvLCBLdmlubmhlcmFkIG9nIFN0b3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfU3VubmhvcmRsYW5kXzRfTWluc3RlX0Jvc3RlZH0Kc3VuX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJFdG5lIiwgIkZpdGphciIsICJTdmVpbyIsICJUeXNuZXMiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjY6IFN1bm5ob3JkbGFuZDogRXRuZSwgRml0aGFyLCBTdmVpbyBvZyBUeXNuZXMiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX1N1bm5ob3JkbGFuZF8zX1N0w7hyc3RlX0Jvc3RlZH0Kc3VuX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCw7htbG8iLCAiU3RvcmQiLCAiS3Zpbm5oZXJhZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDI3OiBTdW5uaG9yZGxhbmQ6IELDuG1sbywgS3Zpbm5oZXJhZCBvZyBTdG9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfU3VubmhvcmRsYW5kXzRfTWluc3RlX0Jvc3RlZH0Kc3VuX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJFdG5lIiwgIlN2ZWlvIiwgIkZpdGphciIsICJUeXNuZXMiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAyODogU3VubmhvcmRsYW5kOiBFdG5lLCBGaXRqYXIsIFN2ZWlvIG9nIFR5c25lcyIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgojIyBIYXJkYW5nZXIKCmBgYHtyIEJvc3RlZF9IYXJkYW5nZXJfMX0KaGFyX2JvcyAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IMOFciwgeSA9IGBBbGxlIE7DpnJpbmdlcmApKSArCiAgZ2VvbV9saW5lKCkgKwogIGxhYnModGl0bGUgPSAiRmlnLiAyOTogSGFyZGFuZ2VyIiwgeT0gIkFsbGUgTsOmcmluZ2VyIikgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMSkpCmBgYAoKYGBge3IgQm9zdGVkX0hhcmRhbmdlcl8yfQpzeXNzZWxfYm9zICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjE4LCAxMjI4KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJyMxMTExMTEnLCcjMDU0OTg3JykpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIkZpZy4gMzA6IEhhcmRhbmdlciIsIHggPSAiw4VyIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIGhhcl9ib3NfbG9uZ30KaGFyX2Jvc19sb25nIDwtIHN5c3NlbF9ib3MgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhcmRhbmdlcl9Cb3N0ZWR9Cmhhcl9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiT2RkYSIsICJVbGxlbnN2YW5nIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lICJBbGxlIE7DpnJpbmdlciIpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSwgb3B0aW9uID0gIkEiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDMxOiBIYXJkYW5nZXI6IE9kZGEgb2cgVWxsZW5zdmFuZyIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfSGFyZGFuZ2VyX0Jvc3RlZH0KaGFyX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJPZGRhIiwgIlVsbGVuc3ZhbmciKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAzMjogSGFyZGFuZ2VyOiBPZGRhLCBVbGxlbnN2YW5nIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCiMgMy4xIExva2FsaXNlcmluZ3Nrdm90aWVudGVyIChWZW50ZXIgcMOlIHN2YXIgZnLDpSBJbmdlIGFuZy4gR0lOSS12ZXJkaWFyLikKCmBgYHtyfQpsaWJyYXJ5KHJlYWR4bCkKbmFzam9uYWx0X2FyYmVpZHNzdGVkIDwtIHJlYWRfZXhjZWwoIkRhdGEvbmFzam9uYWx0X2FyYmVpZHNzdGVkLnhsc3giKQpgYGAKCiMjIExva2FsaXNlcmluZ3Nrdm90aWVudGVyIGZvciByZWdpb25lbmUgc2FtbGV0IChNw6UgdGlsIGxpdHQgbWVpciBhcmJlaWQgZW5kbykKCiMjIyBIYXVnYWxhbmRldCAyMDA4LTIwMjAKCi0gICBFaXJfRXJfSm9yZGJydWsgPSBTYW1sZXQgc3lzc2Vsc2V0dGluZyBpIHJlZ2lvbiBIYXVnYWxhbmRldAotICAgRWlyX0VyX0luZHVzdHJpID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gSW5kdXN0cmktc2VrdG9yZW4gaSByZWdpb24gSGF1Z2FsYW5kZXQKLSAgIEVpcl9Fcl9FbF9WYW5uX1Jlbm8gPSBTYW1sZXQgc3lzc2Vsc2V0dGluZyBpbm5lbiBFbGVrZXRyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24tc2VrdG9yZW4gaSByZWdpb24gSGF1Z2FsYW5kZXQKLSAgIEVpcl9Fcl9CeWdnX29nX0FubGVnZyA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIEJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldC1zZWt0b3JlbiBpIHJlZ2lvbiBIYXVnYWxhbmRldAotICAgRWlyX0VyX0ZpbmFucyA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nLXNla3RvcmVuIGkgcmVnaW9uIEhhdWdhbGFuZGV0Ci0gICBFaXJfRXJfVW5kZXJ2aXNuaW5nID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gVW5kZXJ2aXNuaW5nLXNla3RvcmVuIGkgcmVnaW9uIEhhdWdhbGFuZGV0Ci0gICBFaXJfRXJfSGVsc2UgPSBTYW1sZXQgc3lzc2Vsc2V0dGluZyBpbm5lbiBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyLXNla3RvcmVuIGkgcmVnaW9uIEhhdWdhbGFuZGV0CgpgYGB7ciBobGRfaW5kdXN0cml9CmhsZF9hcmJfTFEgPC0gaGxkX2FyYiAlPiUgCiAgIyBTbGlrIGZpbm5lciB2aSBzYW1sZXQgc3lzc2Vsc2V0dGluZyBpIEluZHVzdHJpIGkgSGF1Z2VsYW5kZXQgZm9yIMOlciAyMDA4LTIwMjAKICBtdXRhdGUoRWlyX0VyX0pvcmRicnVrID0gYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0VsX1Zhbm5fUmVubyA9IGBFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0J5Z2dfb2dfQW5sZWdnID0gYEJ5Z2dlLSBvZyBBbm5sZWdnc3Zpcmtzb21oZXRgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9GaW5hbnMgPSBgRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmdgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9VbmRlcnZpc25pbmcgPSBVbmRlcnZpc25pbmcvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmApICU+JSAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfSm9yZGJydWssIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0VsX1Zhbm5fUmVubywgRWlyX0VyX0J5Z2dfb2dfQW5sZWdnLCBFaXJfRXJfRmluYW5zLCBFaXJfRXJfVW5kZXJ2aXNuaW5nLCBFaXJfRXJfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZShobGRfYXJiX0xRLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSm9yZGJydWsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiVmFubiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJCeWdnIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbmFucyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmRlcnYuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygiTG9rYWxrdm90aWVudCwgcmVnaW9uOiBIYXVnYWxhbmRldCI9OSkpCmBgYAoKYGBge3J9CmhsZF9hcmJfR0lOSSA8LSBobGRfYXJiICU+JSAKICBtdXRhdGUoCiAgICBHSU5JX1ByaW3DpnIgPSAoKGhsZF9hcmIkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gaGxkX2FyYiRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoaGxkX2FyYiRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLSBobGRfYXJiJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChobGRfYXJiJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gaGxkX2FyYiRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSkKYGBgCgpgYGB7cn0KaGxkX2FyYl9HSU5JIDwtIGhsZF9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKGhsZF9hcmIkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBobGRfYXJiJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhobGRfYXJiJEluZHVzdHJpIC8gaGxkX2FyYiRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoaGxkX2FyYiRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvaGxkX2FyYiRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoaGxkX2FyYl9HSU5JLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJIYXVnYWxhbmRldCI9OCkpCmBgYAoKIyMjIyBLb21tdW5lbml2w6UgcMOlIEhhdWdhbGFuZGV0IChIYXVnZXN1bmQsIEthcm3DuHksIFR5c3bDpnIgb2cgQm9rbikKCiMjIyMjIEhhdWdlc3VuZAoKYGBge3J9CkhhdWdfYXJiX0dJTkkgPC0gc3lzc2VsX2FyYiAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICIxMTA2IikKYGBgCgpgYGB7cn0KSGF1Z19hcmJfR0lOSSA8LSBIYXVnX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBFaXJfRXJfUHJpbcOmciA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX0luZHVzdHJpID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhIYXVnX2FyYl9HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9CkhhdWdfYXJiX0dJTkkgPC0gSGF1Z19hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChIYXVnX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIEhhdWdfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKEhhdWdfYXJiX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC0gSGF1Z19hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoSGF1Z19hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIEhhdWdfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9CkhhdWdfYXJiX0dJTkkgPC0gSGF1Z19hcmJfR0lOSSAlPiUKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoSGF1Z19hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYCAvIEhhdWdfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKEhhdWdfYXJiX0dJTkkkSW5kdXN0cmkgLyBIYXVnX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhIYXVnX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9IYXVnX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZSgKICBIYXVnX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJIYXVnZXN1bmQ6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgSGF1Z19hcmJfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJFaXIvRXIiID0gMywgIkVpbi9FbiIgPSAzLCAiTFEiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkhhdWdlc3VuZDogTG9rYWxrdm90aWVudCI9MTEpKQpgYGAKCiMjIyMjIEJva24KCmBgYHtyfQpCb2tuX2FyYl9HSU5JIDwtIHN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiMTE0NSIpCmBgYAoKYGBge3J9CkJva25fYXJiX0dJTkkgPC0gQm9rbl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoQm9rbl9hcmJfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpCb2tuX2FyYl9HSU5JIDwtIEJva25fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoQm9rbl9hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBCb2tuX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0luZHVzdHJpID0gKChCb2tuX2FyYl9HSU5JJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIEJva25fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKEJva25fYXJiX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAgLSBCb2tuX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpCb2tuX2FyYl9HSU5JIDwtIEJva25fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhCb2tuX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gQm9rbl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoQm9rbl9hcmJfR0lOSSRJbmR1c3RyaSAvIEJva25fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKEJva25fYXJiX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL0Jva25fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKAogIEJva25fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkJva246IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgQm9rbl9hcmJfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJFaXIvRXIiID0gMywgIkVpbi9FbiIgPSAzLCAiTFEiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkJva246IExva2Fsa3ZvdGllbnQiPTExKSkKYGBgCgojIyMjIyBUeXN2w6ZyCgpgYGB7cn0KVHlzdl9hcmJfR0lOSSA8LSBzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgIjExNDYiKQpgYGAKCmBgYHtyfQpUeXN2X2FyYl9HSU5JIDwtIFR5c3ZfYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEVpcl9Fcl9Qcmltw6ZyID0gYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9Qcmltw6ZyID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9IZWxzZSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIExRX1ByaW3DpnIgPSBFaXJfRXJfUHJpbcOmciAvIEVpbl9Fbl9Qcmltw6ZyLAogICAgTFFfSW5kdXN0cmkgPSBFaXJfRXJfSW5kdXN0cmkgLyBFaW5fRW5fSW5kdXN0cmksCiAgICBMUV9IZWxzZSA9IEVpcl9Fcl9IZWxzZSAvIEVpbl9Fbl9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTQpCmBgYAoKYGBge3J9Cm5hbWVzKFR5c3ZfYXJiX0dJTkkpW1s1XV0gPC0gIsOFciIKYGBgCgpgYGB7cn0KVHlzdl9hcmJfR0lOSSA8LSBUeXN2X2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBHSU5JX1ByaW3DpnIgPSAoKFR5c3ZfYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gVHlzdl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoVHlzdl9hcmJfR0lOSSRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLSBUeXN2X2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChUeXN2X2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gVHlzdl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSkKYGBgCgpgYGB7cn0KVHlzdl9hcmJfR0lOSSA8LSBUeXN2X2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoVHlzdl9hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYCAvIFR5c3ZfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKFR5c3ZfYXJiX0dJTkkkSW5kdXN0cmkgLyBUeXN2X2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhUeXN2X2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9UeXN2X2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZSgKICBUeXN2X2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJUeXN2w6ZyOiBHaW5pICYgUkRJIj04KSkKCmthYmxlKAogIFR5c3ZfYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJUeXN2w6ZyOiBMb2thbGt2b3RpZW50Ij0xMSkpCmBgYAoKIyMjIyMgS2FybcO4eQoKYGBge3J9Ckthcm1fYXJiX0dJTkkgPC0gc3lzc2VsX2FyYiAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICIxMTQ5IikKYGBgCgpgYGB7cn0KS2FybV9hcmJfR0lOSSA8LSBLYXJtX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBFaXJfRXJfUHJpbcOmciA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX0luZHVzdHJpID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhLYXJtX2FyYl9HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9Ckthcm1fYXJiX0dJTkkgPC0gS2FybV9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChLYXJtX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIEthcm1fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKEthcm1fYXJiX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC0gS2FybV9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoS2FybV9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIEthcm1fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9Ckthcm1fYXJiX0dJTkkgPC0gS2FybV9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKEthcm1fYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAgLyBLYXJtX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhLYXJtX2FyYl9HSU5JJEluZHVzdHJpIC8gS2FybV9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoS2FybV9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvS2FybV9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgS2FybV9hcmJfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiS2FybcO4eTogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBLYXJtX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiS2FybcO4eTogTG9rYWxrdm90aWVudCI9MTEpKQpgYGAKCiMjIyBTdW5uaG9yZGxhbmQgMjAwOC0yMDIwCgotICAgRWlyX0VyX0pvcmRicnVrID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaSByZWdpb24gU3VubmhvcmRsYW5kCi0gICBFaXJfRXJfSW5kdXN0cmkgPSBTYW1sZXQgc3lzc2Vsc2V0dGluZyBpbm5lbiBJbmR1c3RyaS1zZWt0b3JlbiBpIHJlZ2lvbiBTdW5uaG9yZGxhbmQKLSAgIEVpcl9Fcl9FbF9WYW5uX1Jlbm8gPSBTYW1sZXQgc3lzc2Vsc2V0dGluZyBpbm5lbiBFbGVrZXRyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24tc2VrdG9yZW4gaSByZWdpb24gU3VubmhvcmRsYW5kCi0gICBFaXJfRXJfQnlnZ19vZ19BbmxlZ2cgPSBTYW1sZXQgc3lzc2Vsc2V0dGluZyBpbm5lbiBCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQtc2VrdG9yZW4gaSByZWdpb24gU3VubmhvcmRsYW5kCi0gICBFaXJfRXJfRmluYW5zID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gRmluYW5zaWVyaW5nIG9nIEZvcnNpa3Jpbmctc2VrdG9yZW4gaSByZWdpb24gU3VubmhvcmRsYW5kCi0gICBFaXJfRXJfVW5kZXJ2aXNuaW5nID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gVW5kZXJ2aXNuaW5nLXNla3RvcmVuIGkgcmVnaW9uIFN1bm5ob3JkbGFuZAotICAgRWlyX0VyX0hlbHNlID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3Rlci1zZWt0b3JlbiBpIHJlZ2lvbiBTdW5uaG9yZGxhbmQKCmBgYHtyIHN1bl9pbmR1c3RyaX0Kc3VuX2FyYl9MUSA8LSBzdW5fYXJiICU+JSAKICAjIFNsaWsgZmlubmVyIHZpIHNhbWxldCBzeXNzZWxzZXR0aW5nIGkgSW5kdXN0cmkgaSBTdW5uaG9yZGxhbmQgZm9yIMOlciAyMDA4LTIwMjAKICBtdXRhdGUoRWlyX0VyX0pvcmRicnVrID0gYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0VsX1Zhbm5fUmVubyA9IGBFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0J5Z2dfb2dfQW5sZWdnID0gYEJ5Z2dlLSBvZyBBbm5sZWdnc3Zpcmtzb21oZXRgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9GaW5hbnMgPSBgRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmdgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9VbmRlcnZpc25pbmcgPSBVbmRlcnZpc25pbmcvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmApICU+JSAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfSm9yZGJydWssIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0VsX1Zhbm5fUmVubywgRWlyX0VyX0J5Z2dfb2dfQW5sZWdnLCBFaXJfRXJfRmluYW5zLCBFaXJfRXJfVW5kZXJ2aXNuaW5nLCBFaXJfRXJfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZShzdW5fYXJiX0xRLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSm9yZGJydWsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiVmFubiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJCeWdnIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbmFucyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmRlcnYuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygiTG9rYWxrdm90aWVudGVuLCByZWdpb246IFN1bm5ob3JkbGFuZCI9OSkpCmBgYAoKYGBge3J9CnN1bl9hcmJfR0lOSSA8LSBzdW5fYXJiICU+JSAKICBtdXRhdGUoCiAgICBHSU5JX1ByaW3DpnIgPSAoKHN1bl9hcmIkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gc3VuX2FyYiRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoc3VuX2FyYiRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLSBzdW5fYXJiJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChzdW5fYXJiJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gc3VuX2FyYiRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSkKYGBgCgpgYGB7cn0Kc3VuX2FyYl9HSU5JIDwtIHN1bl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKHN1bl9hcmIkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBzdW5fYXJiJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoc3VuX2FyYiRJbmR1c3RyaSAvIHN1bl9hcmIkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhzdW5fYXJiJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9zdW5fYXJiJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZShzdW5fYXJiX0dJTkksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJSZWdpb246IFN1bm5ob3JkbGFuZCI9OCkpCmBgYAoKIyMjIyBLb21tdW5lbml2w6UgaSBTdW5uaG9yZGxhbmQgKFN0b3JkLCBLdmlubmhlcmFkLCBCw7htbG8gb2cgU3ZlaW8pCgojIyMjIyBTdG9yZAoKYGBge3J9ClN0b3JkX2FyYl9HSU5JIDwtIHN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiNDYxNCIpCmBgYAoKYGBge3J9ClN0b3JkX2FyYl9HSU5JIDwtIFN0b3JkX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBFaXJfRXJfUHJpbcOmciA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX0luZHVzdHJpID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhTdG9yZF9hcmJfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpTdG9yZF9hcmJfR0lOSSA8LSBTdG9yZF9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChTdG9yZF9hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBTdG9yZF9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoU3RvcmRfYXJiX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC0gU3RvcmRfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKFN0b3JkX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gU3RvcmRfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9ClN0b3JkX2FyYl9HSU5JIDwtIFN0b3JkX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoU3RvcmRfYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAgLyBTdG9yZF9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoU3RvcmRfYXJiX0dJTkkkSW5kdXN0cmkgLyBTdG9yZF9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoU3RvcmRfYXJiX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL1N0b3JkX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZSgKICBTdG9yZF9hcmJfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiU3RvcmQ6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgU3RvcmRfYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJTdG9yZDogTG9rYWxrdm90aWVudCI9MTEpKQpgYGAKCiMjIyMjIEt2aW5uaGVyYWQKCmBgYHtyfQpLdmlubl9hcmJfR0lOSSA8LSBzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgIjQ2MTciKQpgYGAKCmBgYHtyfQpLdmlubl9hcmJfR0lOSSA8LSBLdmlubl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoS3Zpbm5fYXJiX0dJTkkpW1s1XV0gPC0gIsOFciIKYGBgCgpgYGB7cn0KS3Zpbm5fYXJiX0dJTkkgPC0gS3Zpbm5fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoS3Zpbm5fYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gS3Zpbm5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKEt2aW5uX2FyYl9HSU5JJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIEt2aW5uX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChLdmlubl9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIEt2aW5uX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpLdmlubl9hcmJfR0lOSSA8LSBLdmlubl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKEt2aW5uX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gS3Zpbm5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKEt2aW5uX2FyYl9HSU5JJEluZHVzdHJpIC8gS3Zpbm5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKEt2aW5uX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9Ldmlubl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgS3Zpbm5fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkt2aW5uaGVyYWQ6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgS3Zpbm5fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJLdmlubmhlcmFkOiBMb2thbGt2b3RpZW50Ij0xMSkpCmBgYAoKIyMjIyMgQsO4bWxvCgpgYGB7cn0KQsO4bWxvX2FyYl9HSU5JIDwtIHN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiNDYxMyIpCmBgYAoKYGBge3J9CkLDuG1sb19hcmJfR0lOSSA8LSBCw7htbG9fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEVpcl9Fcl9Qcmltw6ZyID0gYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9Qcmltw6ZyID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9IZWxzZSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIExRX1ByaW3DpnIgPSBFaXJfRXJfUHJpbcOmciAvIEVpbl9Fbl9Qcmltw6ZyLAogICAgTFFfSW5kdXN0cmkgPSBFaXJfRXJfSW5kdXN0cmkgLyBFaW5fRW5fSW5kdXN0cmksCiAgICBMUV9IZWxzZSA9IEVpcl9Fcl9IZWxzZSAvIEVpbl9Fbl9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTQpCmBgYAoKYGBge3J9Cm5hbWVzKELDuG1sb19hcmJfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpCw7htbG9fYXJiX0dJTkkgPC0gQsO4bWxvX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBHSU5JX1ByaW3DpnIgPSAoKELDuG1sb19hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBCw7htbG9fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKELDuG1sb19hcmJfR0lOSSRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLSBCw7htbG9fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKELDuG1sb19hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIELDuG1sb19hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSkKYGBgCgpgYGB7cn0KQsO4bWxvX2FyYl9HSU5JIDwtIELDuG1sb19hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKELDuG1sb19hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYCAvIELDuG1sb19hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoQsO4bWxvX2FyYl9HSU5JJEluZHVzdHJpIC8gQsO4bWxvX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhCw7htbG9fYXJiX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL0LDuG1sb19hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgQsO4bWxvX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJCw7htbG86IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgQsO4bWxvX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiQsO4bWxvOiBMb2thbGt2b3RpZW50Ij0xMSkpCmBgYAoKIyMjIyMgU3ZlaW8KCmBgYHtyfQpTdmVpb19hcmJfR0lOSSA8LSBzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgIjQ2MTIiKQpgYGAKCmBgYHtyfQpTdmVpb19hcmJfR0lOSSA8LSBTdmVpb19hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoU3ZlaW9fYXJiX0dJTkkpW1s1XV0gPC0gIsOFciIKYGBgCgpgYGB7cn0KU3ZlaW9fYXJiX0dJTkkgPC0gU3ZlaW9fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoU3ZlaW9fYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gU3ZlaW9fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKFN2ZWlvX2FyYl9HSU5JJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIFN2ZWlvX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChTdmVpb19hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIFN2ZWlvX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpTdmVpb19hcmJfR0lOSSA8LSBTdmVpb19hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKFN2ZWlvX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gU3ZlaW9fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKFN2ZWlvX2FyYl9HSU5JJEluZHVzdHJpIC8gU3ZlaW9fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKFN2ZWlvX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9TdmVpb19hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgU3ZlaW9fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlN2ZWlvOiBHaW5pICYgUkRJIj04KSkKCmthYmxlKAogIFN2ZWlvX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiU3ZlaW86IExva2Fsa3ZvdGllbnQiPTExKSkKYGBgCgojIyMgSGFyZGFuZ2VyIDIwMDgtMjAyMAoKLSAgIEVpcl9Fcl9Kb3JkYnJ1ayA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGkgcmVnaW9uIEhhcmRhbmdlcgotICAgRWlyX0VyX0luZHVzdHJpID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gSW5kdXN0cmktc2VrdG9yZW4gaSByZWdpb24gSGFyZGFuZ2VyCi0gICBFaXJfRXJfRWxfVmFubl9SZW5vID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gRWxla2V0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uLXNla3RvcmVuIGkgcmVnaW9uIEhhcmRhbmdlcgotICAgRWlyX0VyX0J5Z2dfb2dfQW5sZWdnID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0LXNla3RvcmVuIGkgcmVnaW9uIEhhcmRhbmdlcgotICAgRWlyX0VyX0ZpbmFucyA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nLXNla3RvcmVuIGkgcmVnaW9uIEhhcmRhbmdlcgotICAgRWlyX0VyX1VuZGVydmlzbmluZyA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIFVuZGVydmlzbmluZy1zZWt0b3JlbiBpIHJlZ2lvbiBIYXJkYW5nZXIKLSAgIEVpcl9Fcl9IZWxzZSA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXItc2VrdG9yZW4gaSByZWdpb24gSGFyZGFuZ2VyCgpgYGB7ciBoYXJfaW5kdXN0cml9Cmhhcl9hcmJfTFEgPC0gaGFyX2FyYiAlPiUgCiAgIyBTbGlrIGZpbm5lciB2aSBzYW1sZXQgc3lzc2Vsc2V0dGluZyBpIEluZHVzdHJpIGkgSGFyZGFuZ2VyIGZvciDDpXIgMjAwOC0yMDIwCiAgbXV0YXRlKEVpcl9Fcl9Kb3JkYnJ1ayA9IGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9FbF9WYW5uX1Jlbm8gPSBgRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb25gL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9CeWdnX29nX0FubGVnZyA9IGBCeWdnZS0gb2cgQW5ubGVnZ3N2aXJrc29taGV0YC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfRmluYW5zID0gYEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfVW5kZXJ2aXNuaW5nID0gVW5kZXJ2aXNuaW5nL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgKSAlPiUgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX0pvcmRicnVrLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9FbF9WYW5uX1Jlbm8sIEVpcl9Fcl9CeWdnX29nX0FubGVnZywgRWlyX0VyX0ZpbmFucywgRWlyX0VyX1VuZGVydmlzbmluZywgRWlyX0VyX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoaGFyX2FyYl9MUSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkpvcmRicnVrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZhbm4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQnlnZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaW5hbnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5kZXJ2LiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkxva2Fsa3ZvdGllbnQsIHJlZ2lvbjogSGFyZGFuZ2VyIj05KSkKYGBgCgpgYGB7cn0KaGFyX2FyYl9HSU5JIDwtIGhhcl9hcmIgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoaGFyX2FyYiRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBoYXJfYXJiJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0luZHVzdHJpID0gKChoYXJfYXJiJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIGhhcl9hcmIkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKGhhcl9hcmIkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAgLSBoYXJfYXJiJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpoYXJfYXJiX0dJTkkgPC0gaGFyX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoaGFyX2FyYiRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIGhhcl9hcmIkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhoYXJfYXJiJEluZHVzdHJpIC8gaGFyX2FyYiRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKGhhcl9hcmIkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2hhcl9hcmIkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICAlPiUKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKGhhcl9hcmJfR0lOSSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlJlZ2lvbjogSGFyZGFuZ2VyIj04KSkKYGBgCgojIyMjIEtvbW11bmVuaXbDpSBpIEhhcmRhbmdlciAoT2RkYSBvZyBVbGxlbnN2YW5nKQoKIyMjIyMgT2RkYQoKYGBge3J9Cm5hc2pvX2FyYl9yZWQgPC0gbmFzam9uYWx0X2FyYmVpZHNzdGVkICU+JSAKICBmaWx0ZXIoYWFyICVpbiUgYygyMDA4OjIwMTkpKQpgYGAKCmBgYHtyfQpPZGRhX2FyYl9HSU5JIDwtIHN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiMTIyOCIpCmBgYAoKYGBge3J9Ck9kZGFfYXJiX0dJTkkgPC0gT2RkYV9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb19hcmJfcmVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb19hcmJfcmVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb19hcmJfcmVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoT2RkYV9hcmJfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpPZGRhX2FyYl9HSU5JIDwtIE9kZGFfYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoT2RkYV9hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb19hcmJfcmVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gT2RkYV9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvX2FyYl9yZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKE9kZGFfYXJiX0dJTkkkSW5kdXN0cmkvbmFzam9fYXJiX3JlZCRJbmR1c3RyaSAtIE9kZGFfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb19hcmJfcmVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChPZGRhX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb19hcmJfcmVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIE9kZGFfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb19hcmJfcmVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpPZGRhX2FyYl9HSU5JIDwtIE9kZGFfYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhPZGRhX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gT2RkYV9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb19hcmJfcmVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9fYXJiX3JlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhPZGRhX2FyYl9HSU5JJEluZHVzdHJpIC8gT2RkYV9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb19hcmJfcmVkJEluZHVzdHJpIC8gbmFzam9fYXJiX3JlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhPZGRhX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9PZGRhX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvX2FyYl9yZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvX2FyYl9yZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKAogIE9kZGFfYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIk9kZGEoLTIwMTkpOiBHaW5pICYgUkRJIj04KSkKCmthYmxlKAogIE9kZGFfYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJPZGRhKC0yMDE5KTogTG9rYWxrdm90aWVudCI9MTEpKQpgYGAKCiMjIyMjIFVsbGVuc3ZhbmcKCmBgYHtyfQpVbGxlbl9hcmJfR0lOSSA8LSBzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgIjQ2MTgiKQpgYGAKCmBgYHtyfQpVbGxlbl9hcmJfR0lOSSA8LSBVbGxlbl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoVWxsZW5fYXJiX0dJTkkpW1s1XV0gPC0gIsOFciIKYGBgCgpgYGB7cn0KVWxsZW5fYXJiX0dJTkkgPC0gVWxsZW5fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoVWxsZW5fYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gVWxsZW5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKFVsbGVuX2FyYl9HSU5JJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIFVsbGVuX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChVbGxlbl9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIFVsbGVuX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpVbGxlbl9hcmJfR0lOSSA8LSBVbGxlbl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKFVsbGVuX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gVWxsZW5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKFVsbGVuX2FyYl9HSU5JJEluZHVzdHJpIC8gVWxsZW5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKFVsbGVuX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9VbGxlbl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgVWxsZW5fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlVsbGVuc3Zhbmc6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgVWxsZW5fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJVbGxlbnN2YW5nOiBMb2thbGt2b3RpZW50Ij0xMSkpCmBgYAoKPz9EZXR0ZSBmZXJkaWc/PwoKIyMgTmFzam9uYWx0Pz8gKERldHRlIGthbiBrYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFuc2tqZSBibGkgdGF0dCB2ZWtrLiBEZXQgc2VyIHZpIGV0dGVyIGt2YXJ0KQoKYGBge3J9CiNzeXNzZWxfYXJiIDwtIHN5c3NlbF9hcmIgJT4lIAojICBtdXRhdGUoRWlyX0VyX0pvcmRicnVrID0gYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKIyAgICAgICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiMgICAgICAgICBFaXJfRXJfRWxfVmFubl9SZW5vID0gYEVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uYC9gQWxsZSBOw6ZyaW5nZXJgLAojICAgICAgICAgRWlyX0VyX0J5Z2dfb2dfQW5sZWdnID0gYEJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldGAvYEFsbGUgTsOmcmluZ2VyYCwKIyAgICAgICAgIEVpcl9Fcl9GaW5hbnMgPSBgRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmdgL2BBbGxlIE7DpnJpbmdlcmAsCiMgICAgICAgICBFaXJfRXJfVW5kZXJ2aXNuaW5nID0gVW5kZXJ2aXNuaW5nL2BBbGxlIE7DpnJpbmdlcmAsCiMgICAgICAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCkKYGBgCgpgYGB7cn0KI25hc2pvbmFsdF9hcmJlaWRzc3RlZCA8LSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQgJT4lIAojICBtdXRhdGUoRWluX0VuX0pvcmRicnVrID0gYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKIyAgICAgICAgIEVpbl9Fbl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiMgICAgICAgICBFaW5fRW5fRWxfVmFubl9SZW5vID0gYEVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uYC9gQWxsZSBOw6ZyaW5nZXJgLAojICAgICAgICAgRWluX0VuX0J5Z2dfb2dfQW5sZWdnID0gYEJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldGAvYEFsbGUgTsOmcmluZ2VyYCwKIyAgICAgICAgIEVpbl9Fbl9GaW5hbnMgPSBgRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmdgL2BBbGxlIE7DpnJpbmdlcmAsCiMgICAgICAgICBFaW5fRW5fVW5kZXJ2aXNuaW5nID0gVW5kZXJ2aXNuaW5nL2BBbGxlIE7DpnJpbmdlcmAsCiMgICAgICAgICBFaW5fRW5fSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCkKCgojTFFfYXJiX0pvcmRicnVrIDwtIHN5c3NlbF9hcmIgJT4lIAojICBzZWxlY3QoYWFyLCBrbmF2biwgRWlyX0VyX0pvcmRicnVrKSAlPiUgCiMgIG11dGF0ZShhYXIgPSBhcy5jaGFyYWN0ZXIoYWFyKSkgJT4lIAojICBsZWZ0X2pvaW4oc2VsZWN0KC5kYXRhID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkLCBhYXIsIEVpbl9Fbl9Kb3JkYnJ1ayksIGJ5ID0gYygiYWFyIikpICU+JSAKIyAgbXV0YXRlKGFuZGVsID0gRWlyX0VyX0pvcmRicnVrL0Vpbl9Fbl9Kb3JkYnJ1aykKCgojTFFfYXJiX0luZHVzdHJpIDwtIHN5c3NlbF9hcmIgJT4lIAojICBzZWxlY3QoYWFyLCBrbmF2biwgRWlyX0VyX0luZHVzdHJpKSAlPiUgCiMgIG11dGF0ZShhYXIgPSBhcy5jaGFyYWN0ZXIoYWFyKSkgJT4lIAojICBsZWZ0X2pvaW4oc2VsZWN0KC5kYXRhID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkLCBhYXIsIEVpbl9Fbl9JbmR1c3RyaSksIGJ5ID0gYygiYWFyIikpICU+JSAKIyAgbXV0YXRlKGFuZGVsID0gRWlyX0VyX0luZHVzdHJpL0Vpbl9Fbl9JbmR1c3RyaSkKCgojTFFfYXJiX0VsX1Zhbm5fUmVubyA8LSBzeXNzZWxfYXJiICU+JSAKIyAgc2VsZWN0KGFhciwga25hdm4sIEVpcl9Fcl9FbF9WYW5uX1Jlbm8pICU+JSAKIyAgbXV0YXRlKGFhciA9IGFzLmNoYXJhY3RlcihhYXIpKSAlPiUgCiMgIGxlZnRfam9pbihzZWxlY3QoLmRhdGEgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQsIGFhciwgRWluX0VuX0VsX1Zhbm5fUmVubyksIGJ5ID0gYygiYWFyIikpICU+JSAKIyAgbXV0YXRlKGFuZGVsID0gRWlyX0VyX0VsX1Zhbm5fUmVuby9FaW5fRW5fRWxfVmFubl9SZW5vKQoKCiNMUV9hcmJfQnlnZ19BbmxlZ2cgPC0gc3lzc2VsX2FyYiAlPiUgCiMgIHNlbGVjdChhYXIsIGtuYXZuLCBFaXJfRXJfQnlnZ19vZ19BbmxlZ2cpICU+JSAKIyAgbXV0YXRlKGFhciA9IGFzLmNoYXJhY3RlcihhYXIpKSAlPiUgCiMgIGxlZnRfam9pbihzZWxlY3QoLmRhdGEgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQsIGFhciwgRWluX0VuX0J5Z2dfb2dfQW5sZWdnKSwgYnkgPSBjKCJhYXIiKSkgJT4lIAojICBtdXRhdGUoYW5kZWwgPSBFaXJfRXJfQnlnZ19vZ19BbmxlZ2cvRWluX0VuX0J5Z2dfb2dfQW5sZWdnKQoKCiNMUV9hcmJfRmluYW5zIDwtIHN5c3NlbF9hcmIgJT4lIAojICBzZWxlY3QoYWFyLCBrbmF2biwgRWlyX0VyX0ZpbmFucykgJT4lIAojICBtdXRhdGUoYWFyID0gYXMuY2hhcmFjdGVyKGFhcikpICU+JSAKIyAgbGVmdF9qb2luKHNlbGVjdCguZGF0YSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCwgYWFyLCBFaW5fRW5fRmluYW5zKSwgYnkgPSBjKCJhYXIiKSkgJT4lIAojICBtdXRhdGUoYW5kZWwgPSBFaXJfRXJfRmluYW5zL0Vpbl9Fbl9GaW5hbnMpCgoKI0xRX2FyYl9VbmRlcnZpc25pbmcgPC0gc3lzc2VsX2FyYiAlPiUgCiMgIHNlbGVjdChhYXIsIGtuYXZuLCBFaXJfRXJfVW5kZXJ2aXNuaW5nKSAlPiUgCiMgIG11dGF0ZShhYXIgPSBhcy5jaGFyYWN0ZXIoYWFyKSkgJT4lIAojICBsZWZ0X2pvaW4oc2VsZWN0KC5kYXRhID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkLCBhYXIsIEVpbl9Fbl9VbmRlcnZpc25pbmcpLCBieSA9IGMoImFhciIpKSAlPiUgCiMgIG11dGF0ZShhbmRlbCA9IEVpcl9Fcl9VbmRlcnZpc25pbmcvRWluX0VuX1VuZGVydmlzbmluZykKCgojTFFfYXJiX0hlbHNlIDwtIHN5c3NlbF9hcmIgJT4lIAojICBzZWxlY3QoYWFyLCBrbmF2biwgRWlyX0VyX0hlbHNlKSAlPiUgCiMgIG11dGF0ZShhYXIgPSBhcy5jaGFyYWN0ZXIoYWFyKSkgJT4lIAojICBsZWZ0X2pvaW4oc2VsZWN0KC5kYXRhID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkLCBhYXIsIEVpbl9Fbl9IZWxzZSksIGJ5ID0gYygiYWFyIikpICU+JSAKIyAgbXV0YXRlKGFuZGVsID0gRWlyX0VyX0hlbHNlL0Vpbl9Fbl9IZWxzZSkKYGBgCgpgYGB7cn0KI3N5c3NlbF9hcmIgPC0gc3lzc2VsX2FyYiAlPiUgCiMgIG11dGF0ZShMUV9hcmJfSm9yZGJydWsgPSBMUV9hcmJfSm9yZGJydWskYW5kZWwsCiMgICAgICAgICBMUV9hcmJfSW5kdXN0cmkgPSBMUV9hcmJfSW5kdXN0cmkkYW5kZWwsCiMgICAgICAgICBMUV9hcmJfRWxfVmFubl9SZW5vID0gTFFfYXJiX0VsX1Zhbm5fUmVubyRhbmRlbCwKIyAgICAgICAgIExRX2FyYl9CeWdnX0FubGVnZyA9IExRX2FyYl9CeWdnX0FubGVnZyRhbmRlbCwKIyAgICAgICAgIExRX2FyYl9GaW5hbnMgPSBMUV9hcmJfRmluYW5zJGFuZGVsLAojICAgICAgICAgTFFfYXJiX1VuZGVydmlzbmluZyA9IExRX2FyYl9VbmRlcnZpc25pbmckYW5kZWwsCiMgICAgICAgICBMUV9hcmJfSGVsc2UgPSBMUV9hcmJfSGVsc2UkYW5kZWwpCmBgYAoKYGBge3J9CiNMUV9hcmIgPC0gc3lzc2VsX2FyYiAlPiUgCiMgIHNlbGVjdChhYXIsIGtuYXZuLCBMUV9hcmJfSm9yZGJydWssIExRX2FyYl9JbmR1c3RyaSwgTFFfYXJiX0VsX1Zhbm5fUmVubywgTFFfYXJiX0J5Z2dfQW5sZWdnLCBMUV9hcmJfRmluYW5zLCBMUV9hcmJfVW5kZXJ2aXNuaW5nLCBMUV9hcmJfSGVsc2UpCmBgYAoKYGBge3J9CiNMUV9hcmJbaXMubmEoTFFfYXJiKV0gPSAwCmBgYAoKLSAgIAoKIyBQZW5kbGluZwoKRGUgdWxpa2Uga29tbXVuZW5lIG9nIHJlZ2lvbmVuZSBoYXIgdWxpa2UgYmVob3YsIGZvciBhdCByZWdpb25lbmUgc2thbCB1dHZpa2xlIHNlZyBlciBwZW5kbGluZyBldCB2aWt0aWcgYmVncmVwIGZvciDDpSB0aWx0cmVra2Ugc2VnIGFyYmVpZHNrcmFmdC4KVmVsZGlnIG1hbmdlIGtvbW11bmVyIGhhciBmb3IgbGl0ZSBhcmJlaWRzcGxhc3NlciBpIGZvcmhvbGQgdGlsIGFudGFsbCBhcmJlaWRlbmRlIGlubmJ5Z2dlcmUsIHNvbSB2aWwgc2kgYXQgZGUgZmxlc3RlIGVyIGF2aGVuZ2lnZSBhdiBwZW5kbGVyZS4KUGVuZGxpbmcga2FuIHbDpnJlIHRpbCBhbmRyZSBrb21tdW5lciBpIHNhbW1lIHJlZ2lvbiBlbGxlciB0aWwgYW5kcmUgcmVnaW9uZXIuCkFsbGUga29tbXVuZXIgaGFyIGthbnNramUgaWtrZSBhcmJlaWRzcGxhc3NlciBpbm5lbiBhbGxlIGZhZ2ZlbHQsIGFyYmVpZHN0YWtlcmUgZXIgZGVyZm9yIGF2aGVuZ2lnIGF2IMOlIHBlbmRsZXIgdGlsIGFuZHJlIGtvbW11bmVyIGZvciDDpSBmaW5uZSByZWxldmFudCBhcmJlaWQuCkRldCBzYW1tZSBnamVsZGVyIGRlcnNvbSBhcmJlaWRzdGFrZXIgaGFyIHRpbGjDuHJpZ2hldCB0aWwgZW4ga29tbXVuZSwgbWVuIGRldCBpa2tlIGZpbm5lcyByZWxldmFudCBhcmJlaWQgZGEgZXIgaGFuIG9nc8OlIG7DuGR0IHRpbCDDpSBzw7hrZSBqb2JiIGkgYW5kcmUga29tbXVuZXIuCkhlciBrb21tZXIgYmVncmVwZW5lIGlubnBlbmRsaW5nIG9nIHV0cGVuZGxpbmcgaW5uLCBzb20gYmV0eXIgYXQgbm9lbiBrb21tdW5lciBlbGxlciByZWdpb25lciBoYXIgZmxlcmUgYXJiZWlkc3BsYXNzZXIgdGlsZ2plbmdlbGlnZSBlbm4gZGUgaGFyIGlubmJ5Z2dlcmUgc29tIGthbiBqb2JiZSBpbm5hZCBpIGtvbW11bmVuIGVsbGVyIGF0IGRlIGlra2UgaGFyIG5vayBhcmJlaWRzcGxhc3NlciBvZyBpbm5ieWdnZXJlbmUgZXIgbsO4ZHQgdGlsIMOlIHPDuGtlIGpvYmIgYW5kcmUgcGxhc3Nlci4KVmkgc2thbCBzZSBww6UgaW5ucGVuZGxpbmcgb2cgdXRwZW5kbGluZyBzb20gdmlsIGt1bm5lIGZvcnRlbGxlIG9zcyBpIGh2aWxrZW4gZ3JhZCBldCBzdGVkIGVyIGludGVncmVydCBpIGV0IHN0w7hycmUgYXJiZWlkc21hcmtlZCA8aHR0cHM6Ly9yZWdpb25hbGFuYWx5c2Uubm8vcmFwcG9ydC8zMDA0LzEvND4uCgpOZWRlbmZvciB2aWwgdmkgZsO4cnN0IHRhIGZvciBvc3MgcmVnaW9uZW4gSGF1Z2FsYW5kZXQgb2cgU3VubmhvcmRsYW5kIG1lZCBVbGxlbnN2YW5nLCBvZyBzZSBww6UgZGlzc2UgcmVnaW9uZW5lIGh2ZXIgZm9yIHNlZy4KU8OlIGtvbW1lciBlbiB0YWJlbGwgc29tIHRhciBmb3Igc2VnIGRpc3NlIHJlZ2lvbmVuZSBzYW1sZXQuClZpIMO4bnNrZXIgZsO4cnN0IMOlIHNraWxsZSBkaXNzZSB0byByZWdpb25lbmUgZm9yIMOlIHNlIGkgaHZpbGtlbiBrb21tdW5lIGFuZGVsZW4gYXYgaW5ucGVuZGxpbmcgb2cgdXRwZW5kbGluZyBlciBzdMO4cnN0IG9nIG1pbnN0LgpGb3Igc8OlIMOlIHNlIHDDpSBwZW5kbGluZ2VuIG1lbGxvbSByZWdpb25lbmUuCgpJIHJhZGVuZSBzZWVzIHBlbmRsaW5nIGlubiB0aWwga29tbXVuZW5lLgpOZWRlcnN0ZSByYWQgdmlzZXIgdG90YWxlbiBhdiBhbnRhbGwgcGVuZGxlcmUgaW5uIHRpbCBkZW4gZW5rZWx0ZSBrb21tdW5lLgpIZXIga2FuIHZpIHNlIGVuIGFuZGVsIHN0aWxsaW5nZXIgc29tIGVyIGJlc2F0dCBhdiBhcmJlaWRzdGFrZXJlIGZyYSBhbmRyZSBrb21tdW5lciBpIEhhdWdhbGFuZHNyZWdpb25lbi4KCkkga29sb25uZW5lIHNlciBtYW4gZGUgc29tIHBlbmRsZXJlIHV0IGF2IGh2ZXIgZW5rZWx0IGtvbW11bmUuCkRldCB2aWwgc2kgYXJiZWlkc3Rha2VyZSBzb20gYm9yIGkgZW4ga29tbXVuZSwgb2cgc29tIGhhciBhcmJlaWRzdGVkIGkgZW4gYW5uZW4ga29tbXVuZSBpbm5lbmZvciBIYXVnbGFuZHNyZWdpb25lbi4KCkRlIHNvbSBlciBtYXJrZXJ0IG1lZCBndWx0IGVyIGFyYmVpZHN0YWtlcmUgc29tIGJvciBvZyBqb2JiZXIgaSBzYW1tZSBrb21tdW5lLgoKSGF1Z2xhbmRzcmVnaW9uZW46CgohW10oQmlsZGUvSGF1Z2FsYW5kZXQuUE5HICJIYXVnbGFuZHNyZWdpb25lbiIpCgpIYXVnYWxhbmRzcmVnaW9uZW4gaGFyIDQ0MTE5IGFyYmVpZHNwbGFzc2VyLCBodm9yYXYgMTMxNzAgZXIgcGVuZGxlcmUuCgpIYXVnZXN1bmQsIEthcm3DuHkgb2cgVHlzdsOmciBlciBkZSBrb21tdW5lbmUgaSByZWdpb25lbiBtZWQgaMO4eWVzdCBhbmRlbCBwZW5kbGVyZSBiw6VkZSBuw6VyIGRldCBnamVsZGVyIGlubi0gb2cgdXRwZW5kbGluZy4KTGEgb3NzIHNlIG7DpnJtZXJlIHDDpSBIYXVnZXN1bmQgc29tIGhhciBlbiBzdG9yIGRlbCBhdiBhcmJlaWRzdGFrZXJuZSBpIHJlZ2lvbmVuLgpEZXQgZ2plbGRlciBiw6VkZSBuw6VyIHZpIHNlciBww6UgaW5ucGVuZGxpbmcsIHV0cGVuZGxpbmcgb2cgZGUgc29tIGJvciBvZyBqb2JiZXIgaSBzYW1tZSBrb21tdW5lLgpVdCBpZnJhIHRhYmVsbGVuIGthbiB2aSBzZSBhdCBIYXVnZXN1bmQgaGFyIDExNzE0IGFyYmVpZHN0YWtlcmUgc29tIGJvciBvZyBqb2JiZXIgaSBrb21tdW5lbi4KRnJhIEhhdWdlc3VuZCBlciBkZXQgZWtzZW1wZWx2aXMgMTAyOSBhcmJlaWRzdGFrZXJlIHNvbSBwZW5kbGVyIHRpbCBUeXN2w6ZyIG9nIDI1ODYgYXJiZWlkc3Rha2VyZSBzb20gcGVuZGxlciB0aWwgS2FybcO4eS4KVGlsIFNhdWRhIG9nIFV0c2lyYSBlciBkZXQgZW4gYmV0eWRlbGlnIGxhdmVyZSBhbmRlbCBzb20gcGVuZGxlci4KR3J1bm5lbiB0aWwgYXQgZGV0IG5vayBhdCBkZXQgZXIgbWluZHJlIGtvbW11bmVyIG1lZCBmw6ZycmUgYXJiZWlkc3BsYXNzZXIuCk1hbmdlIGF2IGRlIHNvbSBib3IgaSBkaXN0cmlrdGVuZSBzb20gZWtzZW1wZWx2aXMgU2F1ZGEgb2cgVXRzaXJhIGpvYmJlciBvZyBib3IgaSBzYW1tZSBrb21tdW5lLgpWaSBrYW4gc2UgYXQgaSBTYXVkYSBqb2JiZXIgb2cgYm9yIGRldCAxNzg5IGFyYmVpZHN0YWtlciwgbWVucyBkZSBoYXIgMzEgc3R5a2sgc29tIHBlbmRsZXIgaW5uIHRpbCBrb21tdW5lbiBvZyA2NiBzdHlrayBzb20gcGVuZGxlciB1dCBhdiBrb21tdW5lbi4KRGV0IGthbiB2w6ZyZSBmbGVyZSBzb20gcGVuZGxlciBpbm4gdGlsIG9nIHV0IGF2IGtvbW11bmVuIGZyYSBhbmRyZSByZWdpb25lciwgbWVuIGhlciBzZXIgdmkgdGFsbGVuZSBww6UgZGUgc29tIHBlbmRsZXIgaSBIYXVnYWxhbmRzcmVnaW9uZW4uCgpWaSB2ZXQgYXQgSGF1Z2VzdW5kIGVyIHJlZ2lvbnNlbnRydW0gbWVkIHN5a2VodXMgb2cgaMO4Z3Nrb2xlLgpTYW10aWRpZyBoYXIgSGF1Z2VzdW5kIGZsZXJlIG9samUgb2cgc2rDuGZhcnRzbsOmcmluZ2VyLgpEZXQgZXIgc2VudHJhbGlzZXJ0IHNvbSBiZXR5ciBhdCBkZXQgZXIgZ3J1bm5sYWcgZm9yIGV0IHN0w7hycmUgam9iYm1hcmtlZC4KRGV0IGVyIMOlcnNha2VuIHRpbCBhdCBIYXVnZXN1bmQgaGFyIG1lciBpbm5wZW5kbGluZyBlbm4gZGUgYW5kcmUga29tbXVuZW5lIGkgcmVnaW9uZW4uCkthcm3DuHkgb2cgVHlzdsOmciBzb20gbGlnZ2VyIG7DpnJtZXN0IEhhdWdlc3VuZCBoYXIgc3TDuHJzdCBhbmRlbCB1dHBlbmRsaW5nLCBvZ3PDpSB0aWwgSGF1Z2VzdW5kLgoKU3VubmhvcmRsYW5kCgohW10oQmlsZGUvU3VubmhvcmRsYW5kLlBORyAiU3VubmhvcmRsYW5kIG9nIFVsbGVuc3ZhbmciKQoKSSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gZXIgZGV0IDI4Mjc1IGFyYmVpZHN0YWtlcmUgb20gaGFyIHNpbiBhcmJlaWRzcGxhc3MsIGF2IGRpc3NlIGVyIGRldCAyNTc1IHNvbSBoYXIgc2l0dCBhcmJlaWQgaSBlbiBhbm5lbiBrb21tdW5lIGVubiBkZW4gZGUgYm9yIGkuCgpTb20gdmkga2FuIHNlIGVyIFN0b3JkIGRlbiBrb21tdW5lbiBtZWQgZmxlc3QgYXJiZWlkc3Rha2VyZS4KRGV0dGUga2FuIHZpIHNlIGkgc2FtbWVuaGVuZyBtZWQgYXQgU3RvcmQgZXIgc29tIGV0IHNlbnRydW0gZm9yIHJlZ2lvbmVuLgpFbiBkZWwgYXYgZGUgaW50ZXJrb21tdW5hbGUgc2FtYXJiZWlkZW5lIGhhciBzaW5lIGtvbnRvcmVyIGxva2FsaXNlcnQgcMOlIFN0b3JkLgpTdG9yZCBoYXIgNzMxNCBzb20gYsOlZGUgYm9yIG9nIGFyYmVpZGVyIGlubmFkIGkga29tbXVuZW4uCsOFIGF2IFN0b3JkYWJ1ZW4gc29tIHBlbmRsZXIgdXQgYXYga29tbXVuZW4gZXIgZGV0IGZsZXN0IHNvbSBwZW5kbGVyIHRpbCBCw7htbG8gb2cgRml0amFyLgpEZXR0ZSBnamVsZGVyIG9nc8OlIG1vdHNhdHQgZGEgU3RvcmQgZsOlciBmbGVzdCBpbm5wZW5kbGVyZSBmcmEgZGUgc2FtbWUga29tbXVuZW5lLgpTdG9yZCBvZyBVbGxlbnN2YW5nIGVyIGRlIGVuZXN0ZSBrb21tdW5lbmUgc29tIGhhciBmbGVyZSBzb20gcGVuZGxlciBpbm4gZW5uIHV0LgoKSSBFdG5lIGVyIGRldCBnYW5za2UgbGlrdCBtZWQgaW5uIG9nIHV0cGVuZGxlcmUgZGEgZGUgaGFyIDY2IHNvbSBwZW5kbGVyIHV0IG9nIDYxIHNvbSBwZW5kbGVyIGlubiB0aWwga29tbXVuZW4uCkV0bmUgZXIgb2dzw6UgZGVuIGtvbW11bmVuIHNvbSBoYXIgbWluc3QgYXJiZWlkZXJlIHNvbSBkcml2ZXIgbWVkIHBlbmRsaW5nLgoKVmkgaGFyIHZhbGd0IMOlIHRhIG1lZCBVbGxlbnN2YW5nIGkgU3VubmhvcmRsYW5kc292ZXJzaWt0ZW4uCkV0bmUgb2cgS3Zpbm5oZXJhZCBlciBiZWdnZSBuYWJva29tbXVuZXIgdGlsIFVsbGVuc3ZhbmcuClVsbGVuc3ZhbmcgaGFyIGxpdGUgYsOlZGUgaW5uIG9nIHV0cGVuZGxpbmcuCgpFbiBzYW1sZXQgb3ZlcnNpa3Qgb3ZlciBIYXVnYWxhbmRzcmVnaW9uZW4gb2cgU3VubmhvcmRsYW5kc3JlZ2lvbmVuCgohW10oQmlsZGUvU2FtbGV0LlBORyAiU2FtbGV0IG92ZXJzaWt0IikKClZpIGhhciBzZXR0IHDDpSBpbm5kZWxpbmdlbmUgaSBkZSBmb3Jza2plbGxpZ2UgcmVnaW9uZW5lLgpWaWRlcmUgw7huc2tlciB2aSDDpSBzZSBww6UgcmVnaW9uZW5lIGkgZW4gc2FtbGV0IHRhYmVsbC4KClZpIGhhciB0aWRsaWdlcmUgc2tyZXZldCBvbSBhdCBIYXVnYWxhbmRzcmVnaW9uZW4gaGFyIDEzMTcwIHBlbmRsZXJlLCBtZW5zIFN1bm5ob3JkbGFuZHNyZWdpb25lbiBvZyBVbGxlbnN2YW5nIGhhciAyNTc1IHBlbmRsZXJlLgpPbSB2aSBzZXIgYmVnZ2UgcmVnaW9uZW5lIHNhbWxldCwgw7hrZXIgYW50YWxsIHBlbmRsZXJlIG1lZCB0b3RhbHQgMzMxMSBhcmJlaWRzdGFrZXJlLgpEZXQgdmlsIHNpIGF0IGRldCBlciAzMzExIHN0eWtrZXIgc29tIHBlbmRsZXIgcMOlIHR2ZXJzIGF2IHJlZ2lvbmVuZS4KClV0c2lyYSBoYXIgaWtrZSBpbm4tIGVsbGVyIHV0cGVuZGxlcmUgdGlsIFN1bm5ob3JkbGFuZC4KQm9ydHNldHQgZnJhIGVuIHBlcnNvbiBzb20gcGVuZGxlciB0aWwgU3ZlaW8gaGFyIGhlbGxlciBpa2tlIEJva24gdXRwZW5kbGluZyB0aWwgU3VubmhvcmRsYW5kLgoKSGF1Z2VzdW5kIGVyIGRlbiBrb21tdW5lbiBzb20gaGFyIGZsZXN0IHBlbmRsZXJlIGlubiB0aWwga29tbXVuZW4uCkRlIGxpZ2dlciBsYW5ndCBmb3JhbiBkZSBhbmRyZSBrb21tdW5lbmUgbsOlciBkZXQgZXIgc25ha2sgb20gcGVuZGxpbmcgaW5uIHRpbCBrb21tdW5lbmUuCkthcm3DuHkgZXIgZGVuIGtvbW11bmVuIHNvbSBoYXIgZmxlc3QgaW5uYnlnZ2VyZSBzb20gcGVuZGxlciB1dCBhdiBrb21tdW5lbi4KClZpZGVyZSBrYW4gbWFuIHNlIHDDpSBkZSBzeXN0ZW1hdGlza2UgZm9yc2tqZWxsZW5lIHNldHQgaSBmb3Job2xkIHRpbCBzZW50cmFsaXRldCBvZyB0aWxnamVuZ2VsaWdoZXQgaSBkZXQgbG9rYWxlIGFyYmVpZHNtYXJrZWRldC4KCkhhdWdlc3VuZCwgS2FybcO4eSBvZyBTdG9yZCBlciBzZW50cmFsZSBrb21tdW5lciBodm9yIGRldCBmaW5uZXMgZW4gc3RvciBhbmRlbCBhcmJlaWRzcGxhc3NlciBvZyB0aWxnamVuZ2VsaWdoZXRlbiBpIGFyYmVpZHNtYXJrZWRldCBlciBzdMO4cnJlIGVubiBpIGVrc2VtcGVsdmlzIFNhdWRhLCBVdHNpcmEsIFR5c25lcyBlbGxlciBVbGxlbnN2YW5nLgpEZSBzZW50cmFsaXNlcnRlIGtvbW11bmVuZSBoYXIgZW4gZm9yZGVsIGkgZm9yaG9sZCB0aWwgw6Ugc2thcGUga2x5bmdlciwgZGV0IG1lZCB0YW5rZSBww6UgYXQgbsOlciBmbGVyZSBtZW5uZXNrZXIgYm9zZXR0ZXIgc2VnIGkgc2FtbWUgb21yw6VkZSBrYW4gZW4gZHJhIG55dHRlIGF2IGtvbXBldGFuc2VuIGRlIGlubmVoYXIuClNhdWRhLCBVdHNpcmEsIFR5c25lcyBvZyBVbGxlbnN2YW5nIGVyIGVrc2VtcGxlciBww6Uga29tbXVuZXIgaSB1dGthbnRlbiBhdiByZWdpb25lbmUuCkRlIGJlZmlubmVyIHNlZyBzw6VwYXNzIGxhbmd0IHV0ZW5mb3IgYXQgZGUgaWtrZSB2aWwgZHJhIG55dHRlIGF2IHNlbnRyYWxpdGV0LgoKSSBmaWd1ciAzIG9nIDQgdmlzZXMgZGV0IGF0IGRlIHNpc3RlIDEwIMOlcmVuZSBoYXIgSGF1Z2VzdW5kIGhhdHQgZW4gcmVkdWtzam9uIGkgYW50YWxsIGFuc2F0dGUsIG1lbiBLYXJtw7h5LCBWaW5kYWZqb3JkIG9nIFR5c3bDpnIgaGFyIGhhdHQgZW4gbWFya2FudCDDuGtuaW5nIGkgYW50YWxsIGFyYmVpZHN0YWtlcmUuCkRldCB2aSB2ZXQgZXIgYXQgZGV0IGhhciB1dHZpa2xldCBzZWcgc3TDuHJyZSBuw6ZyaW5nc2tseW5nZXIgdXRlbmZvciBIYXVnZXN1bmQgZGUgc2lzdGUgw6VyZW5lIHNvbSBrYW4gaGEgZW4gc2FtbWVuaGVuZyBtZWQgw7hrbmluZyBpIGFudGFsbCBhbnNhdHRlLgpTYW10aWRpZyBoYXIgb2xqZWJyYW5zamVuIGkgc2FtbWUgcGVyaW9kZSBzbGl0dCBtZWQgbmVkZ2FuZ3N0aWRlciBzb20gcMOldmlya2VyIGLDpWRlIEhhdWdlc3VuZCBvZyBTdG9yZC4KRGlzc2Uga29tbXVuZW5lIGhhciBlbiBkZWwgb2xqZWJhc2VydGUgbsOmcmluZ2VyIG9nIGkgZGUgcGVyaW9kZW5lIG9samVtYXJrZWRldCBzdmluZ2VyIHZpbCBhcmJlaWRzbWFya2VkZXQgdmlzZSBtYXJrYW50IG5lZGdhbmcgaSBhbnRhbGwgYXJiZWlkc3BsYXNzZXIuCkRldCB2aWwgb2dzw6UgdmlzZSBlbiBiZXR5ZGVsaWcgw7hrbmluZyBpIGFudGFsbCBhcmJlaWRzcGxhc3NlciBvbSBkZXQgZXIgb3BwZ2FuZ3N0aWRlci4KT3BwZ2FuZ3N0aWRlciBpIG9samVuw6ZyaW5nZW4gZ2lyIGVuIMO4a25pbmcgYXYgcGVuZGxlcmUgaW5uIHRpbCBrb21tdW5lciBzb20gaGFyIHZpcmtzb21oZXRlciBpbm5lbmZvciBvbGplbsOmcmluZ2VuLgoKLSAgIAoKYGBge3Igc2lzdGV9CiMgU2lzdGUKYGBgCgotICAgCg==